如果CDB中有多个PDB,每个PDB对应的业务不一样,就会产生资源争用,影响业务。 因此存在多PDB的情况,可以通过资源管理来限制每个PDB使用的资源数量:
- 限制指定PDB的CPU使用
- 限制指定PDB可以使用的并行执行数量
- 限制指定PDB的内存使用(最低/最大使用)
- 限制连接到PDB的不同会话的资源使用大小
- 限制指定PDB产生的I/O
- 监视PDB的资源使用情况
可以在CDB 级别控制多个PDB的资源使用,也可以在单个PDB中控制自己的资源使用情况。
我们这里只说明在单个PDB的操作。
1 CPU 资源控制
PDB的CPU和并行执行资源控制通过资源计划指令实现,也可以通过调整参数实现。 通过资源计划指令的方式可以参考我的书籍,里面有详细的说明:
《Oracle 18c 必须掌握的新特性》
https://www.cndba.cn/dave/article/3453
我们这里看只说明调整参数的方式,涉及的2个参数如下:
- CPU_COUNT 参数:指定PDB可使用的最大CPU线程数(注意是线程而非物理核心)。若未显式设置,默认继承CDB$ROOT的值(即服务器逻辑CPU总数)
- CPU_MIN_COUNT 参数:PDB在任何时刻保证可用的最小CPU线程数,用于防止资源争用导致的性能下降。值范围:
小数模式:0.1~0.95(步长0.05),表示占CPU_COUNT的比例(如0.5代表50%)。
整数模式:1~CPU_COUNT,表示固定线程数4。
注意:
这2个参数仅在启用Resource Manager(ALTER SYSTEM SET resource_manager_plan = ‘default_plan’;)后生效。
1.1 修改参数
启用资源计划:
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
其中:
- AVG_CPU_UTILIZATION:表示PDB所消耗的CPU的平均百分比。
- 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
其中:
- CPU_CONSUMED_TIME:CPU使用时间。
- CPU_TIME_WAIT:CPU的等待时间(以毫秒为单位)。
- 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
其中:
- AVG_ACTIVE_PARALLEL_STMTS和AVG_ACTIVE_PARALLEL_SERVERS:表示并行语句运行的平均数和并行语句使用的平均并行服务器数。
- AVG_QUEUED_PARALLEL_STMTS和AVG_QUEUED_PARALLEL_SERVERS:表示排队的并行语句请求的平均并行服务器数和平均并行服务器数。
- PARALLEL_SERVERS_LIMIT:表示PDB允许使用的并行数。
2 内存资源控制
主要涉及如下几个参数:
- SGA_MIN_SIZE:设置的最小的SGA大小,不能大于SGA_TARGET参数值的50%。
- SGA_TARGET:设置的最大的SGA大小。只有当SGA_TARGET初始化参数在CDB中设置为非0时,Oracle才会强制设置PDB中的SGA_TARGET参数。
- PGA_AGGREGATE_TARGET:设置总PGA的大小,其参数值不能大于CDB 中PGA_AGGREGATE_LIMIT参数值的50%。
- 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的两个参数如下:
- MAX_IOPS:限制每秒产生的I/O操作数。
- MAX_MBPS:限制每秒产生的I/O数据量大小(Mb)。
默认情况下,如果在CDB 中设置该参数值,那么该CDB中的所有PDB都继承该参数值。如果在PDB中设置了新的参数值,那么原来CDB 的中参数值对该PDB不再生效,将启用新的参数值。
这两个参数的默认值为0,也就是对PDB的I/O操作是没有限制的。但注意,即使启用了I/O限制,对于一些重要文件的操作仍不在此限制中。例如对控制文件,密码文件的I/O操作,这些操作称为重要I/O操作。
3.2 修改参数
查看默认值:
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
版权声明:本文为博主原创文章,未经博主允许不得转载。