oracle 可以使用比 memory_max_target 更多的記憶體嗎?
我的系統有 34GB RAM,但是,我已經設置
memory_max_target = 3G memory_target = 3G
Oracle 記憶體參數使用 G (GB)、M (MB) 或 K (KB) 指定
……我使用 AMM(自動記憶體管理)。
即使當我檢查我的記憶體的目前使用情況時就是這種情況
**free -m**
…它顯示總共使用了大約 33 GB。所以我猜,Oracle 也使用了其中的一些(是的,我的意思是超過memory_max_target大小,即 3 GB)。
所以,我的問題是:
- Oracle 可以使用比我們設置的更多的記憶體
memory_max_target
嗎?- 或者這是 Oracle 永遠不會改變的“硬”限制,即使系統有足夠的可用記憶體?
free 的輸出包括記憶體和緩衝區,很多人陷入了認為他們的記憶體被使用而實際上沒有被使用的陷阱。訪問此站點進行解釋:http ://www.linuxatemyram.com/
但另一方面,是的,Oracle 絕對可以使用比
memory_max_target
參數配置更多的記憶體。參數,例如memory_max_target
,memory_max_size
僅限制 SGA 的大小。在 12c 之前,PGA 不能被限制,即使有隱藏參數_pga_max_size
。該參數限制了每個會話的 PGA 大小,但它不考慮所有類型的分配,因此即使是 1 個“胭脂”會話也會佔用數據庫伺服器的所有記憶體。從 12c 開始,有參數
pga_aggregate_limit
,這是 PGA 的真正硬限制。參考:
- 使用自動記憶體管理(Oracle Docs 11g)
- 6.3 使用自動記憶體管理(Oracle Docs 12c)
- 6.4.4 使用自動 PGA 記憶體管理(Oracle Docs 12c)
我意識到這是一個舊執行緒,但如果其他人遇到這個執行緒,我想更正給出的第一個答案,因為它不准確。受訪者表示“參數,如memory_max_target、memory_max_size僅限制SGA的大小”。不對。來自 Oracle 的文件:
管理實例記憶體的最簡單方法是允許 Oracle 數據庫實例為您自動管理和調整它。為此(在大多數平台上),您只需設置目標記憶體大小初始化參數 (MEMORY_TARGET) 和可選的最大記憶體大小初始化參數 (MEMORY_MAX_TARGET)。然後實例調整到目標記憶體大小,根據需要在系統全域區域 (SGA) 和實常式序全域區域(實例 PGA)之間重新分配記憶體。