【TUNE_ORACLE】PGA_AGGREGATE_LIMIT詳解(三)PGA_AGGREGATE_LIMIT的大小設定

Attack_on_Jager發表於2022-05-11

說明

相關文章連結:

PGA_AGGREGATE_LIMIT詳解(一)PGA_AGGREGATE_TARGET的限制: http://blog.itpub.net/69992972/viewspace-2893571/

PGA_AGGREGATE_LIMIT詳解(二)PGA_AGGREGATE_LIMIT的作用: http://blog.itpub.net/69992972/viewspace-2893573/

PGA_AGGREGATE_LIMIT詳解(三)PGA_AGGREGATE_LIMIT的大小設定: http://blog.itpub.net/69992972/viewspace-2893574/


PGA_AGGREGATE_LIMIT的大小設定

這個引數是動態引數,但一般無需手動設定,因為這個引數會根據實際記憶體的變化來做出調整。不同版本的PGA_AGGREGATE_LIMIT的預設大小設定規則也不一樣:

(1)12.1

12.1版本會選擇以下三種情況中最大的值作為PGA_AGGREGATE_LIMIT的值:

1)2 GB

2)200% 的 PGA_AGGREGATE_TARGET

3)引數PROCESSES的值 * 3 MB

注:

該引數不會超過實體記憶體大小減去總 SGA 大小的 120%。

 

(2)12.2

1)如果設定了MEMORY_TARGET(AMM管理),那麼PGA_AGGREGATE_LIMIT的值就等於MEMORY_MAX_TARGET的值

2)如果MEMORY_TARGET沒有設定,那麼PGA_AGGREGATE_LIMIT的值為2倍PGA_AGGREGATE_TARGET值

3)如果MEMORY_TARGET沒有設定,並且PGA_AGGREGATE_TARGET的值為0,那麼PGA_AGGREGATE_LIMIT的值為90%的實體記憶體減去SGA的大小

在以上所有情況中, 預設的PGA_AGGREGATE_LIMIT至少是2GB 並且至少是資料庫引數PROCESSES乘以3MB的大小。

 

(3)18c及以上版本

由於涉及到使用MGA,並且MGA不計算在PGA的大小中,所以 18c以上的版本就要把MGA給考慮進去,就要透過增加PGA來解決。

所以18c及以上的版本的計算方式為:

PGA_AGGREGATE_LIMIT = (原始 PGA_AGGREGATE_LIMIT 值) + ((最大連線程式數) * 4M)


這裡再補充幾個概念:

系統全域性區除了我們所知的PGA和SGA外,還包括MGA和DGA。

1. MGA(管理全域性區):允許“較小的一組”程式(甚至所有程式)在持續時間(通常是查詢)內共享地址空間(名稱空間)

2. DGA(動態全域性區):允許在 PGA 初始化期間初始化並且在執行時不可修改的變數池

3. 這兩個引數不會跨程式更改,但需要在 SGA 初始化之前可用。因此,它們可作為全域性變數供其他程式使用。MGA和DGA從12.1 開始就存在了。但是隻有在最近的版本中(如18c),資料庫元件才開始使用它

4. MGA 和 DGA 在Oracle程式之間共享,它們不能歸屬於單個程式

5.  v$process 和 v$sesstat不會包含它們。它們只會計入到v$pgastat,其中一部分計入“使用中的總PGA”,查詢SQL如下:

SQL> select * from v$pgastat where name like '%GA%' and name not like '%PGA %';


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2893574/,如需轉載,請註明出處,否則將追究法律責任。

相關文章