签到成功

知道了

CNDBA社区CNDBA社区

Oracle 19c 中 PDB 实例 的资源控制(CPU / 内存 / IO)

2025-07-03 18:22 6 0 原创 Oracle 19c
作者: dave

如果CDB中有多个PDB,每个PDB对应的业务不一样,就会产生资源争用,影响业务。 因此存在多PDB的情况,可以通过资源管理来限制每个PDB使用的资源数量:

  1. 限制指定PDB的CPU使用
  2. 限制指定PDB可以使用的并行执行数量
  3. 限制指定PDB的内存使用(最低/最大使用)
  4. 限制连接到PDB的不同会话的资源使用大小
  5. 限制指定PDB产生的I/O
  6. 监视PDB的资源使用情况

可以在CDB 级别控制多个PDB的资源使用,也可以在单个PDB中控制自己的资源使用情况。
我们这里只说明在单个PDB的操作。

1 CPU 资源控制

PDB的CPU和并行执行资源控制通过资源计划指令实现,也可以通过调整参数实现。 通过资源计划指令的方式可以参考我的书籍,里面有详细的说明:http://www.cndba.cn/dave/article/131675

《Oracle 18c 必须掌握的新特性》
https://www.cndba.cn/dave/article/3453

http://www.cndba.cn/dave/article/131675

我们这里看只说明调整参数的方式,涉及的2个参数如下:

  1. CPU_COUNT 参数:指定PDB可使用的最大CPU线程数(注意是线程而非物理核心)。若未显式设置,默认继承CDB$ROOT的值(即服务器逻辑CPU总数)
  2. CPU_MIN_COUNT 参数:PDB在任何时刻保证可用的最小CPU线程数,用于防止资源争用导致的性能下降。值范围:
    小数模式:0.1~0.95(步长0.05),表示占CPU_COUNT的比例(如0.5代表50%)。
    整数模式:1~CPU_COUNT,表示固定线程数4。

注意:

http://www.cndba.cn/dave/article/131675

这2个参数仅在启用Resource Manager(ALTER SYSTEM SET resource_manager_plan = ‘default_plan’;)后生效。http://www.cndba.cn/dave/article/131675

1.1 修改参数

启用资源计划:

http://www.cndba.cn/dave/article/131675

SQL> alter session set container=dave;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL> SELECT plan, status FROM DBA_RSRC_PLANS;
SQL>  ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DEFAULT_PLAN' SCOPE=BOTH;
System altered.

PDB 中修改:

SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL> show parameter cpu_count
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
cpu_count                            integer                           4
SQL> alter system set cpu_min_count=1 scope=both;
System altered.
SQL> alter system set cpu_count=2 scope=both;
System altered.

SQL> show parameter cpu_count
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
cpu_count                            integer                           2
SQL> show parameter cpu_min_count

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
cpu_min_count                        string                            1
SQL>

1.2 监控CPU使用情况

1.2.1 查看CPU利用率

SQL> set lines 160
SQL> col pdb_name for a15
SQL> SELECT r.CON_ID, 
  2         p.PDB_NAME, 
  3         r.CPU_UTILIZATION_LIMIT, 
  4         r.AVG_CPU_UTILIZATION 
  5  FROM   V$RSRCPDBMETRIC r, 
  6         CDB_PDBS p
  7  WHERE r.CON_ID = p.CON_ID;

    CON_ID PDB_NAME        CPU_UTILIZATION_LIMIT AVG_CPU_UTILIZATION
---------- --------------- --------------------- -------------------
         3 DAVE                              100                   0

其中:

  1. AVG_CPU_UTILIZATION:表示PDB所消耗的CPU的平均百分比。
  2. CPU_UTILIZATION_LIMIT:表示PDB可以使用的CPU的最大百分比。这个限制通过UTILIZATION_LIMIT指令设置。

1.2.2 查看CPU使用和等待时间

SQL> SELECT r.CON_ID, 
  2         p.PDB_NAME, 
  3         r.CPU_CONSUMED_TIME, 
  4         r.CPU_WAIT_TIME, 
  5         r.NUM_CPUS 
  6  FROM   V$RSRCPDBMETRIC r, 
  7         CDB_PDBS p
  8  WHERE r.CON_ID = p.CON_ID;

    CON_ID PDB_NAME        CPU_CONSUMED_TIME CPU_WAIT_TIME   NUM_CPUS
---------- --------------- ----------------- ------------- ----------
         3 DAVE                            0             0          4

其中:http://www.cndba.cn/dave/article/131675http://www.cndba.cn/dave/article/131675

  1. CPU_CONSUMED_TIME:CPU使用时间。
  2. CPU_TIME_WAIT:CPU的等待时间(以毫秒为单位)。
  3. NUM_CPUS:表示资源管理器正在管理的CPU数量。

1.2.3 查看Parallel Execution

SQL> SELECT r.CON_ID, p.PDB_NAME, r.AVG_ACTIVE_PARALLEL_STMTS, r.AVG_QUEUED_PARALLEL_STMTS, r.AVG_ACTIVE_PARALLEL_SERVERS, r.AVG_QUEUED_PARALLEL_SERVERS, r.PARALLEL_SERVERS_LIMIT FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID;

    CON_ID PDB_NAME        AVG_ACTIVE_PARALLEL_STMTS AVG_QUEUED_PARALLEL_STMTS AVG_ACTIVE_PARALLEL_SERVERS AVG_QUEUED_PARALLEL_SERVERS PARALLEL_SERVERS_LIMIT
---------- --------------- ------------------------- ------------------------- --------------------------- --------------------------- ----------------------
         3 DAVE                                    0                         0                           0                           0                    80

其中:http://www.cndba.cn/dave/article/131675

  1. AVG_ACTIVE_PARALLEL_STMTS和AVG_ACTIVE_PARALLEL_SERVERS:表示并行语句运行的平均数和并行语句使用的平均并行服务器数。
  2. AVG_QUEUED_PARALLEL_STMTS和AVG_QUEUED_PARALLEL_SERVERS:表示排队的并行语句请求的平均并行服务器数和平均并行服务器数。
  3. PARALLEL_SERVERS_LIMIT:表示PDB允许使用的并行数。

2 内存资源控制

主要涉及如下几个参数:http://www.cndba.cn/dave/article/131675

  1. SGA_MIN_SIZE:设置的最小的SGA大小,不能大于SGA_TARGET参数值的50%。
  2. SGA_TARGET:设置的最大的SGA大小。只有当SGA_TARGET初始化参数在CDB中设置为非0时,Oracle才会强制设置PDB中的SGA_TARGET参数。
  3. PGA_AGGREGATE_TARGET:设置总PGA的大小,其参数值不能大于CDB 中PGA_AGGREGATE_LIMIT参数值的50%。
  4. PGA_AGGREGATE_LIMIT:设置最大的PGA大小。参数值必须大于或等于PGA_AGGREGATE_TARGET值大小的两倍。

2.1 查看当前值

查看当前值:

SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL> show parameter sga_target
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
sga_target                           big integer                       0
SQL> show parameter sga_min_size
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
sga_min_size                         big integer                       0
SQL> show parameter PGA_AGGREGATE_TARGET
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
pga_aggregate_target                 big integer                       410M
SQL> show parameter PGA_AGGREGATE_LIMIT
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
pga_aggregate_limit                  big integer                       2G

2.2 修改内存参数

SQL> alter system set sga_min_size=1G scope=both;
alter system set sga_min_size=1G scope=both
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-56748: invalid value 1073741824 for parameter sga_min_size; must be smaller than 50% of parameter sga_target of the root container


SQL> alter system set sga_min_size=500m scope=both;

System altered.

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> show parameter sga_min_size

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
sga_min_size                         big integer                       500M
SQL>

注意:

PDB的参数值并不是写在pfile中,而是记录在CDB的数据字典里。

2.3 查看内存使用

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 DAVE             365106294    5414117          327318662          37787632

3 I/O资源控制

3.1 参数说明

限制PDB磁盘I/O的两个参数如下:

  1. MAX_IOPS:限制每秒产生的I/O操作数。
  2. MAX_MBPS:限制每秒产生的I/O数据量大小(Mb)。
    默认情况下,如果在CDB 中设置该参数值,那么该CDB中的所有PDB都继承该参数值。如果在PDB中设置了新的参数值,那么原来CDB 的中参数值对该PDB不再生效,将启用新的参数值。
    这两个参数的默认值为0,也就是对PDB的I/O操作是没有限制的。但注意,即使启用了I/O限制,对于一些重要文件的操作仍不在此限制中。例如对控制文件,密码文件的I/O操作,这些操作称为重要I/O操作。

3.2 修改参数

查看默认值:http://www.cndba.cn/dave/article/131675

SQL> show parameter max_iops
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
max_iops                             integer                           0
SQL> show parameter max_mbps
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
max_mbps                             integer                           0
SQL>

修改参数值:

SQL> ALTER SYSTEM SET MAX_IOPS = 10000 SCOPE = BOTH;  --10000次/s
System altered.

SQL> ALTER SYSTEM SET MAX_MBPS = 500 SCOPE = BOTH;  --500M/s
System altered.

SQL> show parameter max_mbps
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
max_mbps                             integer                           500
SQL> show parameter max_iops
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
max_iops                             integer                           10000
SQL>

3.3 监控PDB IO

3.3.1 查看PDB每秒产生的I/O读写次数

SQL>COLUMN PDB_NAME FORMAT A10
SQL>SELECT r.CON_ID, p.PDB_NAME, r.IOPS FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID;
    CON_ID PDB_NAME              IOPS
---------- --------------- ----------
         3 DAVE            .866522246

3.3.2 查看PDB每秒产生的I/O数据量

SQL>COLUMN PDB_NAME FORMAT A10
SQL>SELECT r.CON_ID, p.PDB_NAME, r.IOMBPS FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID;
    CON_ID PDB_NAME            IOMBPS
---------- --------------- ----------
         3 DAVE            .016663889

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8164463次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ