暂无图片
暂无图片
11
暂无图片
暂无图片
暂无图片

Oracle PDB资源管理(12.2+)

原创 文盲筱烨 2021-12-01
3036

本文主要介绍 Oracle pdb 资源管理 相关内存 如IO、内存、cpu – by Firsouler

IO资源管理

Oracle12.2开始,引入参数来限制pdb的IO,不对CDB和NO-CDB环境生效,不限制redo log和buffer cache写入磁盘。

  • MAX_IOPS : 每秒IO操作次数
  • MAX_MBPS : 每秒IO吞吐

命令参考:

--所有pdb ALTER SYSTEM SET max_iops=100 SCOPE=BOTH; ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH; --单独pdb ALTER SESSION SET CONTAINER = pdbcndba; ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH; ALTER SYSTEM SET max_iops=100 SCOPE=BOTH; --取消 ALTER SYSTEM SET max_iops=0 SCOPE=BOTH; ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;

监控PDB的IO使用情况

  • v$rsrcpdbmetric:每个pdb一行,保存1分钟样本的最后一个指标值
  • v$rsrcpdbmetric_history: 每个pdb61行,保存最后60分钟的样本
  • dba_hist_rsrc_pdb_metric :AWR快照,基于AWR保留策略

参考sql:

SET LINESIZE 180 set pages 999 COLUMN pdb_name FORMAT A10 COLUMN begin_time FORMAT A26 COLUMN end_time FORMAT A26 ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY/MM/DD HH24:MI:SS'; -- 每个PDB最后样本 SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.iops,2) iops, round(r.iombps,2) iombps, round(r.iops_throttle_exempt,2) iops_throttle_exempt, round(r.iombps_throttle_exempt,2) iombps_throttle_exempt, r.avg_io_throttle FROM v$rsrcpdbmetric r, cdb_pdbs p WHERE r.con_id = p.con_id ORDER BY p.pdb_name; --监控pdb最近几个小时的使用情况 ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.iops,2) iops, round(r.iombps,2) iombps, round(r.iops_throttle_exempt,2) iops_throttle_exempt, round(r.iombps_throttle_exempt,2) iombps_throttle_exempt, r.avg_io_throttle FROM v$rsrcpdbmetric_history r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = upper('MYPDB') ORDER BY r.begin_time; --基于AWR快照监视PDB SELECT r.snap_id, r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.iops,2) iops, round(r.iombps,2) iombps, round(r.iops_throttle_exempt,2) iops_throttle_exempt, round(r.iombps_throttle_exempt,2) iombps_throttle_exempt, r.avg_io_throttle FROM dba_hist_rsrc_pdb_metric r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = 'MYPDB' ORDER BY r.begin_time;

内存管理

内存控制 需要满足以下条件:

  • CDB$ROOT中初始化参数NONCDB_COMPATIBLE保持为默认的FALSE
  • CDB$ROOT中初始化参数MEMORY_TARGET没有设置或设置为0,即关闭内存自动管理

管理PDB的sga

  • SGA_TARGET参数控制PDB使用的最大SGA大小,在PDB中,SGA_TARGET必须要小于或等于CDB$ROOT中的SGA_TARGET
  • 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的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
-- 注意,memory_target 设置为0 ALTER SESSION SET CONTAINER=PDB1; ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 500M SCOPE = BOTH; ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 300M SCOPE = BOTH;

监控PDB内存使用

  • V$RSRCPDBMETRIC : 一个PDB对应一条记录,只保留最近一分钟的数据
  • V$RSRCPDBMETRIC_HISTORY : 一个PDB对应61行记录,保留最近60分钟的数据
  • DBA_HIST_RSRC_PDB_METRIC : AWR快照,保留时间基于AWR的保留时间
--监视最近一分钟指标 col pdb_name for a15 ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.sga_bytes/1024/1024,2) sga_mb, round(r.pga_bytes/1024/1024,2) pga_mb, round(r.buffer_cache_bytes/1024/1024,2) buffer_cache_mb, round(r.shared_pool_bytes/1024/1024,2) shared_pool_mb FROM v$rsrcpdbmetric r, cdb_pdbs p WHERE r.con_id = p.con_id ORDER BY p.pdb_name; --监视最近1小时指标数据 SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.sga_bytes/1024/1024,2) sga_mb, round(r.pga_bytes/1024/1024,2) pga_mb, round(r.buffer_cache_bytes/1024/1024,2) buffer_cache_mb, round(r.shared_pool_bytes/1024/1024,2) shared_pool_mb FROM v$rsrcpdbmetric_history r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = 'MYPDB' ORDER BY r.begin_time; --基于快照监视 col begin_time for a20 col end_time for a20 ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY/MM/DD HH24:MI:SS'; SELECT r.snap_id, r.con_id, p.pdb_name, r.begin_time, r.end_time, round(r.sga_bytes/1024/1024,2) sga_mb, round(r.pga_bytes/1024/1024,2) pga_mb, round(r.buffer_cache_bytes/1024/1024,2) buffer_cache_mb, round(r.shared_pool_bytes/1024/1024,2) shared_pool_mb FROM dba_hist_rsrc_pdb_metric r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = 'MYPDB' ORDER BY r.begin_time;

CPU资源管理

从12.1开始,CDB级 resource plans 可用。 使用CDB级 resource plans,我们可以限制特定PDB的资源使用,例如:

  • 限制特定PDB的CPU使用率
  • 限制特定PDB可以使用的并行执行 Server 的个数
  • 限制特定PDB的内存使用
  • 限制连接到单个PDB的不同会话的资源使用情况
  • 限制特定PDB生成的 I/O

12.2中引入的 Performance Profiles 和 Mandatory PDB Profiles 可以为一组PDB而不是单个PDB配置CDB resource plan 指标.

参考sql(假设为testdb创建 cdb resource plan,该计划包括gold/silver/bronze的每个pdb performance profiles的指标,然后将这些分配给pdb):

--1.创建过程 for cdb exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); --2.创建资源管理计划 for cdb BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN( plan => 'testdb_plan', comment => 'CDB resource plan for testdb'); END; / --3.创建指标 gold/silver/bronze BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE( plan => 'testdb_plan', profile => 'gold', shares => 3, utilization_limit => 100, parallel_server_limit => 100); END; / --silver BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE( plan => 'testdb_plan', profile => 'silver', shares => 2, utilization_limit => 40, parallel_server_limit => 40); END; / --bronze BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE( plan => 'testdb_plan', profile => 'bronze', shares => 1, utilization_limit => 20, parallel_server_limit => 20); END; / --4.更新 BEGIN DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE( plan => 'testdb_plan', profile => 'bronze', new_shares => 1, new_utilization_limit => 10, new_parallel_server_limit => 20); END; / --5.(可选)使用UPDATE_CDB_AUTOTASK_DIRECTIVE过程更新缺省 autotask 指标,autotask指令适用于在root 维护窗口中运行的自动维护任务 BEGIN DBMS_RESOURCE_MANAGER.UPDATE_CDB_AUTOTASK_DIRECTIVE( plan => 'testdb_plan', new_shares => 1, new_utilization_limit => 60, new_parallel_server_limit => 60); END; / --6.使用VALIDATE_PENDING_AREA过程验证 pending area exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA(); --7. 使用SUBMIT_PENDING_AREA过程提交 pending area exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA(); --8.启动 for cdb ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'testdb_plan' scope=both; --9.指定 alter session set container=PDB1; alter system set db_performance_profile='gold' scope=spfile; --重启 alter pluggable database all close immediate; alter pluggable database all open;

检查

--检查确认启用资源管理计划 set lines 168 pages 99 col plan for a32 col comments for a32 col status for a8 col mandatory for a10 select plan_id, plan, comments, status, mandatory from dba_cdb_rsrc_plans; --查看资源计划配置 col PLUGGABLE_DATABASE for a32 col profile for a24 select plan,pluggable_database,shares,utilization_limit, PARALLEL_SERVER_LIMIT,profile from dba_cdb_rsrc_plan_directives; set lines 168 pages 99 col plan for a28 col comments for a32 col status for a8 col mandatory for a10 col PLUGGABLE_DATABASE for a28 col profile for a12 select rp.plan_id, rp.plan, rp.status, rp.mandatory, pd.pluggable_database, pd.shares, pd.utilization_limit, pd.parallel_server_limit, pd.profile, rp.comments from dba_cdb_rsrc_plans rp, dba_cdb_rsrc_plan_directives pd where rp.plan = pd.plan; --检查pdb参数 col name for a20 col value for a20 select inst_id, name, con_id, value, ispdb_modifiable from gv$system_parameter2 where name = 'db_performance_profile' order by 1,2,3,4; --pdb 指标细节 set lines 200 select p.name, shares, utilization_limit, PARALLEL_SERVER_LIMIT,profile from v$rsrc_plan r, v$pdbs p where r.con_id = p.con_id;

监控PDB使用

V$RSRCPDBMETRIC 视图使您能够以毫秒为单位,以会话数量或过去一分钟的利用率来跟踪CPU指标。它为每个PDB提供实时指标,并且在您正在运行工作负载并希望持续监视CPU资源利用率的情况下非常有用。

使用此视图来比较具有其他PDB设置的PDB的最大可能CPU利用率和平均CPU利用率百分比

  • CPU使用时间,CPU等待时间,CPU使用的平均会话数以及正在等待的会话数用于CPU分配。
  • 可以查看PDB使用的CPU资源数量以及等待资源分配的时间。
  • 可以查看每个PDB执行的会话数与活动会话总数的关系。
--根据PDB的CPU利用率跟踪CPU消耗 COLUMN PDB_NAME FORMAT A10 SELECT r.CON_ID, p.PDB_NAME, r.CPU_UTILIZATION_LIMIT, r.AVG_CPU_UTILIZATION FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID; --监视PDB的CPU消耗和节流 COLUMN PDB_NAME FORMAT A10 SELECT r.CON_ID, p.PDB_NAME, r.CPU_CONSUMED_TIME, r.CPU_WAIT_TIME, r.NUM_CPUS FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID; --监视PDB会话数跟踪CPU消耗和节流 COLUMN PDB_NAME FORMAT A10 SELECT r.CON_ID, p.PDB_NAME, r.RUNNING_SESSIONS_LIMIT, r.AVG_RUNNING_SESSIONS, r.AVG_WAITING_SESSIONS FROM V$RSRCPDBMETRIC r, CDB_PDBS p WHERE r.CON_ID = p.CON_ID;

参考

  • Managing OS Resources Among PDBs Using PDB Perfromance Profiles - 12.2 New Feature (文档 ID 2171135.1)
  • https://www.cnblogs.com/binliubiao/p/13328593.html
  • https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/using-oracle-resource-manager-for-pdbs-with-sql-plus.html#GUID-2708E76D-E18B-4586-920A-BD4B904AE14D
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论