Oracle 12c 多租戶專題|12cR2中PDB記憶體資源管理

沃趣科技發表於2017-09-18
沃趣科技  周天鵬
原文連結   



在12.2之前的版本,我們根本沒有辦法控制一個單獨的PDB能使用的記憶體總量。導致的結果就是“一個糟糕的鄰居”可能佔用大量記憶體從而導致同一個例項下其他PDB的效能下降。在Oracle 12.2中,你可以控制某單個PDB能使用的記憶體總量。

如果你的CDB中只有一個PDB,那麼你就不需要做這些限制,因為你本來就想讓這個單獨的PDB用掉例項的所有記憶體。


PDB記憶體引數

下列引數都可以在PDB級別進行設定:

  • DB_CACHE_SIZE : The minimum buffer cache size for the PDB.

  • SHARED_POOL_SIZE : The minimum shared pool size for the PDB.

  • PGA_AGGREGATE_LIMIT : The maximum PGA size for the PDB.

  • PGA_AGGREGATE_TARGET : The target PGA size for the PDB.

  • SGA_MIN_SIZE : The minimum SGA size for the PDB.

  • SGA_TARGET : The maximum SGA size for the PDB.

關於哪些值可以設定也有一些限制,官方文件中給出了詳細的解釋(),總結如下:

  • CDB中的NONCDB_COMPATIBLE引數必須設為FALSE

  • CDB中的MEMORY_TARGET引數未設定或者為0

  • 獨立的引數會有不同的最大值,來防止你給一個PDB分配過量的記憶體。如果你嘗試設定一個錯誤的值將會報錯。


設定PDB記憶體引數

設定PDB記憶體引數的過程和設定一個普通例項的儲存引數並沒有什麼區別。下面的例子是修改SGA_TARGET引數。

檢查CDB的當前設定:

CONN / AS SYSDBA
SHOW PARAMETER sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 2544M
SQL>

檢查PDB的當前設定:

CONN / AS SYSDBA
ALTER SESSION SET CONTAINER=pdb1;

SHOW PARAMETER sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 0
SQL>

設定PDB的SGA_TARGET引數:

SQL> ALTER SYSTEM SET sga_target=1G SCOPE=BOTH;System altered.

SQL> SHOW PARAMETER sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 1G
SQL>

當我們嘗試給PDB制定一個比所處的CDB更大的SGA時將會報如下的錯誤:

SQL> ALTER SYSTEM SET sga_target=3G SCOPE=BOTH;
ALTER SYSTEM SET sga_target=3G SCOPE=BOTH
*ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-56747: invalid value 3221225472 for parameter sga_target; must be smaller
than parameter sga_target of the root container

SQL>

如果你不再想控制這個引數的值,你可以把它設定為0或者reset掉。

ALTER SYSTEM SET sga_target=0 SCOPE=BOTH;
ALTER SYSTEM RESET sga_target;


監控PDB的記憶體使用

Oracle提供了一些檢視來監控PDB的資源使用(例如CPU、I/O、記憶體)。每個檢視包含相同的資訊,只是保留時間不同。

  • V$RSRCPDBMETRIC:一個PDB對應一條記錄,只保留最近一分鐘的資料

  • V$RSRCPDBMETRIC_HISTORY:一個PDB對應61行記錄,保留最近60分鐘的資料

  • DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留時間基於AWR的保留時間

例子如下:

CONN / AS SYSDBASET LINESIZE 150COLUMN pdb_name FORMAT A10COLUMN begin_time FORMAT A26COLUMN end_time FORMAT A26ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF'; -- Last sample per PDB.SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytesFROM   v$rsrcpdbmetric r,
       cdb_pdbs pWHERE  r.con_id = p.con_idORDER BY p.pdb_name;-- Last hours samples for PDB1SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytesFROM   v$rsrcpdbmetric_history r,
       cdb_pdbs pWHERE  r.con_id = p.con_idAND    p.pdb_name = 'PDB1'ORDER BY r.begin_time;-- All AWR snapshot information for PDB1.SELECT r.snap_id,
       r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytesFROM   dba_hist_rsrc_pdb_metric r,
       cdb_pdbs pWHERE  r.con_id = p.con_idAND    p.pdb_name = 'PDB1'ORDER BY r.begin_time;


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

相關文章