萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle 10G數據庫自動內存管理分析

Oracle 10G數據庫自動內存管理分析

是不是很難准確地分配不同的池所需的內存數?自動共享內存管理特性使得自動將內存分配到最需要的地方去成為可能。

無論您是一個剛入門的 DBA 還是一個經驗豐富的 DBA,您肯定至少看到過一次類似以下的錯誤: ORA-04031:unable to allocate 2216 bytes
of shared memory ("shared pool"... ...

或者這種錯誤:

ORA-04031:unable to allocate XXXX bytes of shared memory
("large pool","unknown object","session heap","frame")

或者可能這種錯誤:

ORA-04031:unable to allocate bytes of shared memory ("shared pool",
"unknown object","joxlod:init h", "JOX:ioc_allocate_pal")

第一種錯誤的原因很明顯:分配給共享池的內存不足以滿足用戶請求。(在某些情況下,原因可能不是池本身的大小,而是未使用綁定變量導致的過多分析造成的碎片,這是我很喜歡的一個主題;但目前讓我們把重點放在手頭的問題上。)其它的錯誤分別來自大型池和 Java 池的空間不足。

您需要解決這些錯誤情況,而不作任何與應用程序相關的修改。那麼有哪些方案可選呢?問題是如何在 Oracle 例程所需的所有池之間劃分可用的內存。

餡餅怎麼分?

正如您所了解的,一個 Oracle 例程的系統全局區域 (SGA) 包含幾個內存區域(包括緩沖高速緩存、共享池、Java 池、大型池和重做日志緩沖)。這些池在操作系統的內存空間中占據了固定的內存數;它們的大小由 DBA 在初始化參數文件中指定。

這四個池(數據庫塊緩沖高速緩存、共享池、Java 池和大型池)幾乎占據了 SGA 中所有的空間。(與其它區域相比,重做日志緩沖沒有占據多少空間,對我們這裡的討論無關緊要。)作為 DBA,您必須確保它們各自的內存分配是充足的。

假定您決定了這些池的值分別是 2GB、1GB、1GB 和 1GB。您將設置以下初始化參數來為數據庫例程規定池的大小。

db_cache_size = 2g
shared_pool_size = 1g
large_pool_size = 1g
java_pool_size = 1g

  • 共4頁:
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
copyright © 萬盛學電腦網 all rights reserved