Oracle12cR2控制PDB的资源使用

1. 介绍

在Oracle 12c的多租户环境中,PDB的SGA使用情况可能会很不均衡,有些PDB占用了大量的SGA内存,导致某些PDB得不到足够的SGA,进而影响性能。在Oracle 12.2的多租户环境中,可以控制和监控每个PDB的主机资源使用情况。要控制每个PDB的主机资源使用,以下两个条件需要满足:
1. CDB$ROOT中初始化参数NONCDB_COMPATIBLE保持为默认的FALSE
2. CDB$ROOT中初始化参数MEMORY_TARGET没有设置或设置为0

2. 管理PDB的SGA

1. SGA_TARGET参数控制PDB使用的最大SGA大小
在PDB中,SGA_TARGET必须要小于或等于CDB$ROOT中的SGA_TARGET
2. SGA_MIN_SIZE参数控制PDB最小SGA大小
SGA_MIN_SIZE参数的设置指导如下:

  • SGA_MIN_SIZE设置的值必须要小于CDB$ROOT中SGA_TARGET的值50%
  • SGA_MIN_SIZE设置的值必须要小于PDB中SGA_TARGET值的50%
  • 所有PDB的SGA_MIN_SIZE值总和必须要小于CDB$ROOT中SGA_TARGET的值50%
  • 注意:只有当CDB$ROOT中SGA_TARGET为非0值时,PDB中的SGA_TARGET和SGA_MIN_SIZE才生效。

    alter session set container=PDB1;
    ALTER SYSTEM SET SGA_TARGET = 1500M SCOPE = BOTH;
    ALTER SYSTEM SET SGA_MIN_SIZE = 500M SCOPE = BOTH;
    

    对于更细致的控制,可以设置PDB的DB_CACHE_SIZE和SHARED_POOL_SIZE。

    3. 管理PDB的PGA

    在PDB级别上设置PGA_AGGREGATE_TARGET和PGA_AGGREGATE_LIMIT可以控制某个PDB的PGA使用情况。
    PGA_AGGREGATE_TARGET是目标值,PGA_AGGREGATE_LIMIT是限制值。
    如果PGA使用量达到PGA_AGGREGATE_LIMIT这个限制值,会话就会报错。
    PGA_AGGREGATE_TARGET设置指导如下:

  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_TARGET
  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT的50%
  • 必须小于或等于PDB的PGA_AGGREGATE_LIMIT的50%
  • PGA_AGGREGATE_LIMIT设置PDB的最大PGA使用量,设置指导如下:

  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT
  • 必须大于或等于PDB的PGA_AGGREGATE_TARGET × 2
  • 在PDB上设置PGA参数如下:

    alter session set container=PDB1;
    ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 500M SCOPE = BOTH;
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 300M SCOPE = BOTH;
    

    4. 监控PDB的内存使用

    以下两个视图用于监控PDB的资源使用

  • V$RSRCPDBMETRIC
  • V$RSRCPDBMETRIC_HISTORY
  • SQL> COLUMN PDB_NAME FORMAT A10
    SQL> SELECT r.CON_ID, p.PDB_NAME, r.SGA_BYTES, r.PGA_BYTES, r.BUFFER_CACHE_BYTES, r.SHARED_POOL_BYTES 
         FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID;
    
        CON_ID PDB_NAME    SGA_BYTES  PGA_BYTES BUFFER_CACHE_BYTES SHARED_POOL_BYTES
    ---------- ---------- ---------- ---------- ------------------ -----------------
             3 PDB1        101506108   83566821           43900518          57605590
    

    SGA_BYTES – PDB当前SGA大小
    BUFFER_CACHE_BYTES – PDB当前buffer cache大小
    SHARED_POOL_BYTES – PDB当前shared pool大小
    PGA_BYTES – PDB当前PGA大小
    历史统计信息可以参考:DBA_HIST_RSRC_PDB_METRIC

    关于紫砂壶

    感悟技术人生
    此条目发表在Oracle基础知识分类目录,贴了标签。将固定链接加入收藏夹。

    2 则回应给 Oracle12cR2控制PDB的资源使用

    1. 匿名说:

      如果有多个pdb的话,所有的pdb的内存可以超过cdb的吗?还是cdb的内存参数只是限制作用?

    评论已关闭。