oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理

沃趣科技  周天鹏

原文链接

在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> ALTERSYSTEMSET sga_target=1G SCOPE=BOTH;Systemaltered.

SQL> SHOW PARAMETER sga_target;

NAME                                TYPE       VALUE

------------------------------------ ----------- ------------------------------

sga_target                           big integer 1G

SQL>

当我们尝试给PDB制定一个比所处的CDB更大的SGA时将会报如下的错误:

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>

如果你不再想控制这个参数的值,你可以把它设置为0或者reset掉。

ALTERSYSTEMSET sga_target=0 SCOPE=BOTH;

ALTERSYSTEMRESET 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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值