Oracle 12c 多租户专题|隔离PDB的磁盘IO
原文链接 https://oracle-base.com/articles/12c/multitenant-disk-iops-mdps-resource-management-for-pdbs-12cr2 译者 周天鹏
在12c R2之前的版本中,控制单个PDB的磁盘IO是一件很困难的事。导致的结果就是“一个糟糕的邻居”可能占用大量的磁盘IO从而导致同一个实例下其他PDB的性能下降。Oracle Database 12c Release 2 (12.2)允许你控制单个PDB最大可使用的磁盘IO(IOPS以及MBPS)。
PDB中的IO控制参数
可以在CDB或PDB级别去设置下列参数来控制PDB级别的IO阈值:
MAX_IOPS:PDB中每秒最大的IO操作次数。默认值为0。不建议设置小于100的IOPS MAX_MBPS:PDB中每秒最大的IO带宽(MB)。默认值为0。不建议设置小于25的MBPS 关于使用这两个参数,需要考虑如下这些:
* 这两个参数是独立的,你可以设置一个、两个或者一个都不设置
* 当这两个参数在CDB根中设置后,他们将变成所有PDB的默认值
* 当你在PDB级别设置了这两个参数后,PDB中的值可以覆盖默认值
* 如果在CDB和PDB中这两个参数值均为0,则没有IO阈值
* 某些常规函数的关键IO不会受到限制,但依然会计算到总IO中,所以,实际IO瞬时超过设定的阈值是有可能的
* 该参数只有多租户环境下可以使用
* Exadata无法使用该特性
* 设定阈值回造成一个等待事件,叫做resmgr: I/O rate limit.
设置IO参数
下面的例子是在CDB级别设置MAX_IOPS以及 MAX_MBPS参数,并作为所有PDB的默认值。
CONN / AS SYSDBA
-- Set defaults.
ALTER SYSTEM SET max_iops=100 SCOPE=BOTH;
ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;
-- Remove defaults.
ALTER SYSTEM SET max_iops=0 SCOPE=BOTH;
ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;
下面的例子是在PDB级别设置MAX_IOPS以及 MAX_MBPS参数
CONN / AS SYSDBA
ALTER SESSION SET CONTAINER = pdb1;
-- Set PDB-specific values.
ALTER SYSTEM SET max_iops=100 SCOPE=BOTH;
ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;
-- Remove PDB-specific values.
ALTER SYSTEM SET max_iops=0 SCOPE=BOTH;
ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;
监控PDB的IO使用
Oracle提供了一些视图来监控PDB的资源使用(例如CPU、I/O、内存)。每个视图包含相同的信息,只是保留时间不同。
* V$RSRCPDBMETRIC:一个PDB对应一条记录,只保留最近一分钟的数据
* V$RSRCPDBMETRIC_HISTORY:一个PDB对应61行记录,保留最近60分钟的数据
* DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留时间基于AWR的保留时间 例子如下:
CONN / AS SYSDBA
SET LINESIZE 150
COLUMN pdb_name FORMAT A10
COLUMN begin_time FORMAT A26
COLUMN end_time FORMAT A26
ALTER 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_bytes
FROM v$rsrcpdbmetric r,
cdb_pdbs p
WHERE r.con_id = p.con_id
ORDER BY p.pdb_name;
-- Last hours samples for PDB1
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_bytes
FROM v$rsrcpdbmetric_history r,
cdb_pdbs p
WHERE r.con_id = p.con_id
AND 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_bytes
FROM dba_hist_rsrc_pdb_metric r,
cdb_pdbs p
WHERE r.con_id = p.con_id
AND p.pdb_name = 'PDB1'
ORDER BY r.begin_time;
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 元素偏移量 offset 系列
- 设计模式系列之建造者模式构建实体类
- 元素可视区 client 系列
- 【阿里】在 nginx 中如何配置负载均衡
- 并发编程系列之JDK JUC实现内存缓存(支持并发)
- 10.1【前端开发】背景属性:样式中背景色和背景图片样式如何使用?
- 元素滚动 scroll 系列
- Java基础系列之fastjson parse多级json数据
- Linux系列之下载安装jdk-8u261-linux-i586.tar.gz
- 常见网页特效案例
- MySQL系列之体系结构原理学习笔记
- 触屏事件
- 10.2【前端开发】图片文件格式:常见的图片格式对比有何优劣以及如何使用Google的webp格式?
- uni-app 与 Vue H5 项目通讯
- Gridview][UpdateCommand的写法要点]