oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理
沃趣科技 ?周天鵬
原文鏈接
在12.2之前的版本,我們根本沒有辦法控制一個(gè)單獨(dú)的PDB能使用的內(nèi)存總量。導(dǎo)致的結(jié)果就是“一個(gè)糟糕的鄰居”可能占用大量內(nèi)存從而導(dǎo)致同一個(gè)實(shí)例下其他PDB的性能下降。在Oracle 12.2中,你可以控制某單個(gè)PDB能使用的內(nèi)存總量。
如果你的CDB中只有一個(gè)PDB,那么你就不需要做這些限制,因?yàn)槟惚緛砭拖胱屵@個(gè)單獨(dú)的PDB用掉實(shí)例的所有內(nèi)存。
PDB內(nèi)存參數(shù)
下列參數(shù)都可以在PDB級(jí)別進(jìn)行設(shè)置:
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.
關(guān)于哪些值可以設(shè)置也有一些限制,官方文檔中給出了詳細(xì)的解釋(),總結(jié)如下:
CDB中的NONCDB_COMPATIBLE參數(shù)必須設(shè)為FALSE
CDB中的MEMORY_TARGET參數(shù)未設(shè)置或者為0
獨(dú)立的參數(shù)會(huì)有不同的最大值,來防止你給一個(gè)PDB分配過量的內(nèi)存。如果你嘗試設(shè)置一個(gè)錯(cuò)誤的值將會(huì)報(bào)錯(cuò)。
設(shè)置PDB內(nèi)存參數(shù)
設(shè)置PDB內(nèi)存參數(shù)的過程和設(shè)置一個(gè)普通實(shí)例的存儲(chǔ)參數(shù)并沒有什么區(qū)別。下面的例子是修改SGA_TARGET參數(shù)。
檢查CDB的當(dāng)前設(shè)置:
CONN / AS SYSDBA
SHOW PARAMETER sga_target;
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE ? ? ? VALUE
------------------------------------ ----------- ------------------------------
sga_target ? ? ? ? ? ? ? ? ? ? ? ? ? big integer 2544M
SQL>
檢查PDB的當(dāng)前設(shè)置:
CONN / AS SYSDBA
ALTER SESSION SET CONTAINER=pdb1;
SHOW PARAMETER sga_target;
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE ? ? ? VALUE
------------------------------------ ----------- ------------------------------
sga_target ? ? ? ? ? ? ? ? ? ? ? ? ? big integer 0
SQL>
設(shè)置PDB的SGA_TARGET參數(shù):
SQL> ALTERSYSTEMSET sga_target=1G SCOPE=BOTH;Systemaltered.
SQL> SHOW PARAMETER sga_target;
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE ? ? ? VALUE
------------------------------------ ----------- ------------------------------
sga_target ? ? ? ? ? ? ? ? ? ? ? ? ? big integer 1G
SQL>
當(dāng)我們嘗試給PDB制定一個(gè)比所處的CDB更大的SGA時(shí)將會(huì)報(bào)如下的錯(cuò)誤:
SQL> ALTERSYSTEMSET sga_target=3G SCOPE=BOTH;
ALTERSYSTEMSET 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>
如果你不再想控制這個(gè)參數(shù)的值,你可以把它設(shè)置為0或者reset掉。
ALTERSYSTEMSET sga_target=0 SCOPE=BOTH;
ALTERSYSTEMRESET sga_target;
監(jiān)控PDB的內(nèi)存使用
Oracle提供了一些視圖來監(jiān)控PDB的資源使用(例如CPU、I/O、內(nèi)存)。每個(gè)視圖包含相同的信息,只是保留時(shí)間不同。
V$RSRCPDBMETRIC:一個(gè)PDB對(duì)應(yīng)一條記錄,只保留最近一分鐘的數(shù)據(jù)
V$RSRCPDBMETRIC_HISTORY:一個(gè)PDB對(duì)應(yīng)61行記錄,保留最近60分鐘的數(shù)據(jù)
DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留時(shí)間基于AWR的保留時(shí)間
例子如下:
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;
總結(jié)
以上是生活随笔為你收集整理的oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 外部表装载,Oracle
- 下一篇: oracle逻辑结构包含,在Oracle