Oracle

Oracle 自動記憶體管理 - SGA_MAX_SIZE

  • April 25, 2014

使用自動記憶體管理時,SGA_MAX_SIZE 應該是什麼值?應該是0嗎?這些是我目前的設置,我不確定是保留 SGA_MAX_SIZE 還是將其設置為 0。

memory_max_target     2147483648
memory_target         2147483648
pga_aggregate_target  0
sga_max_size          1610612736
sga_target            0

甲骨文 11gR2

文件sga_max_size說:

在 64 位平台和非 Windows 32 位平台上,當指定MEMORY_TARGET或時MEMORY_MAX_TARGET,預設值SGA_MAX_SIZE設置為兩個參數中的較大者。

並且根據11g (Doc ID 443746.1) 上的 Oracle 文件 Automatic Memory Management (AMM),如果您同時擁有sga_target並未pga_aggregate_target設置,則:

如果兩者都沒有設置,它們將自動調整,沒有任何最小值或預設值。我們將製定一個策略,在初始化期間將由 MEMORY_TARGET 參數設置的總記憶體以固定比例分配給 SGA 和 PGA。政策是在啟動時將 60% 給 SGA,40% 給 PGA。

因此,如果您希望 Oracle 完全控制 SGA,最簡單的做法是重置它並應用預設值:

SQL> alter system reset sga_max_size scope=spfile;

(並重新啟動。)

如果您想要 AMM 但想要 SGA 或 PGA(或兩者)的最小值,請通過設置相應的_target參數來實現:

前面的步驟 [設置 AMM ] 指示您將SGA_TARGETPGA_AGGREGATE_TARGET設置為零,以便根據需要調整 SGA 和實例 PGA 的大小,不受限制。您可以省略將這些參數值設置為零的語句,並將其中一個或兩個值保留為正數。在這種情況下,這些值充當 SGA 或實例 PGA 大小的最小值。

無論您做什麼,都不要將 PGA 或 SGA 目標或最大大小設置為大於記憶體目標。這會阻止實例啟動。

引用自:https://dba.stackexchange.com/questions/63875