
📊 Oracle V$RSRCPDBMETRIC 动态性能视图详解
1️⃣ 视图概述与作用
V$RSRCPDBMETRIC 是 Oracle 多租户数据库(Multitenant)中用于监控各个PDB(Pluggable Database)资源使用情况的关键动态性能视图。它提供了每个PDB在CDB(Container Database)级别的资源消耗指标,特别是在启用了多租户资源管理时,帮助DBA监控和诊断各个PDB的资源分配和使用情况。
核心作用:
- PDB资源监控:提供每个PDB的CPU、I/O、内存等资源使用情况的详细指标
- 多租户资源管理:监控资源管理器在PDB级别的执行效果和资源分配情况
- 性能诊断:识别资源使用过高的PDB,诊断跨PDB的资源争用问题
- 容量规划:为PDB级别的资源分配和容量规划提供数据支持
2️⃣ 主要应用场景
- 多租户环境监控:在CDB环境中监控各个PDB的资源使用情况
- 资源争用诊断:当CDB出现资源瓶颈时,识别哪个PDB消耗资源最多
- 资源管理策略验证:验证PDB级别的资源管理策略是否有效执行
- 性能优化:基于资源使用数据优化各个PDB的性能配置
- 计费和容量规划:在多租户环境中为资源使用计费和容量规划提供依据
3️⃣ 字段详解
以下是 V$RSRCPDBMETRIC 视图的主要字段说明:
| 字段名称 | 数据类型 | 含义与说明 | 示例值 |
|---|---|---|---|
| CON_ID | NUMBER | 容器ID。标识PDB的唯一数字标识符 | 3, 4, 5 |
| CON_NAME | VARCHAR2(30) | 容器名称。PDB的名称 | 'PDB1', 'PDB2' |
| BEGIN_TIME | DATE | 指标收集开始时间。统计周期的开始时间 | 2023-10-05 14:30:00 |
| END_TIME | DATE | 指标收集结束时间。统计周期的结束时间 | 2023-10-05 14:31:00 |
| CPU_CONSUMED_TIME | NUMBER | CPU消耗时间。PDB消耗的CPU时间(毫秒) | 45000 |
| CPU_TIME_LIMIT | NUMBER | CPU时间限制。PDB的CPU时间限制(如果有) | 100000 |
| CPU_UTILIZATION | NUMBER | CPU使用率。PDB的CPU使用率百分比 | 75.5 |
| CPU_WAIT_TIME | NUMBER | CPU等待时间。PDB因资源限制等待CPU的时间(毫秒) | 5000 |
| IO_REQUESTS | NUMBER | I/O请求数。PDB发出的I/O请求数量 | 1200 |
| IO_BYTES | NUMBER | I/O字节数。PDB读写操作的字节数 | 104857600 |
| MEMORY_USED | NUMBER | 内存使用量。PDB使用的内存大小(字节) | 536870912 |
| MEMORY_LIMIT | NUMBER | 内存限制。PDB的内存限制(字节) | 1073741824 |
| PARALLEL_SERVERS | NUMBER | 并行服务器数。PDB使用的并行服务器数量 | 8 |
| PARALLEL_SERVERS_LIMIT | NUMBER | 并行服务器限制。PDB的并行服务器限制 | 16 |
| ACTIVE_SESSIONS | NUMBER | 活动会话数。PDB中的活动会话数量 | 25 |
| EXECUTIONS | NUMBER | 执行次数。PDB中SQL语句的执行次数 | 15000 |
| DB_TIME | NUMBER | 数据库时间。PDB消耗的数据库时间(微秒) | 60000000 |
4️⃣ 相关视图与基表
-
核心相关视图:
V$RSRCMGRMETRIC:提供消费者组级别的资源管理器指标V$RSRCPDBMETRIC_HISTORY:提供PDB级别的历史资源指标V$CONTAINERS:显示CDB中所有容器的信息V$PDBS:提供PDB的具体信息和状态V$SYSMETRIC:提供系统级别的性能指标
-
底层基表与存储原理:
V$RSRCPDBMETRIC的数据来源于内存中的内部 X$ 表(通常是X$KJRSRCPDBM或类似结构)- 这些指标由数据库资源管理器的后台进程动态收集和更新
- 数据存储在系统全局区(SGA) 中
- 数据是易失性的,实例关闭后不会持久化
5️⃣ 底层原理与知识点
多租户资源管理架构
PDB资源管理原理
- 资源分配:在CDB级别,资源被分配给各个PDB
- 资源监控:每个PDB的资源使用情况被实时监控和记录
- 资源限制:可以设置PDB级别的资源使用限制(CPU、内存、I/O等)
- 资源争用处理:当资源紧张时,资源管理器根据配置策略分配资源
关键性能指标
- CPU使用:
CPU_CONSUMED_TIME和CPU_UTILIZATION反映PDB的CPU消耗 - 内存使用:
MEMORY_USED和MEMORY_LIMIT反映PDB的内存使用情况 - I/O活动:
IO_REQUESTS和IO_BYTES反映PDB的I/O活动水平 - 并行处理:
PARALLEL_SERVERS反映PDB的并行处理能力使用情况
6️⃣ 常用查询SQL示例
- 查看各个PDB的CPU使用情况
SELECT con_id,
con_name,
cpu_consumed_time,
cpu_utilization,
cpu_wait_time
FROM v$rsrcpdbmetric
ORDER BY cpu_consumed_time DESC;
- 监控PDB的内存使用情况
SELECT con_id,
con_name,
memory_used/1024/1024 AS memory_used_mb,
memory_limit/1024/1024 AS memory_limit_mb,
ROUND((memory_used/memory_limit)*100, 2) AS memory_utilization
FROM v$rsrcpdbmetric
WHERE memory_limit > 0
ORDER BY memory_used DESC;
- 分析PDB的I/O活动
SELECT con_id,
con_name,
io_requests,
io_bytes/1024/1024 AS io_mb,
ROUND(io_bytes/NULLIF(io_requests, 0)/1024, 2) AS avg_io_kb_per_request
FROM v$rsrcpdbmetric
ORDER BY io_bytes DESC;
- 检测资源使用接近限制的PDB
SELECT con_id,
con_name,
cpu_utilization,
memory_used/memory_limit*100 AS memory_utilization,
parallel_servers/parallel_servers_limit*100 AS parallel_utilization
FROM v$rsrcpdbmetric
WHERE cpu_utilization > 80
OR (memory_used/memory_limit) > 0.8
OR (parallel_servers/parallel_servers_limit) > 0.8;
- 结合历史数据分析PDB资源使用趋势
SELECT h.con_name,
AVG(h.cpu_utilization) AS avg_cpu_usage,
MAX(h.cpu_utilization) AS max_cpu_usage,
AVG(h.memory_used/h.memory_limit)*100 AS avg_memory_usage
FROM v$rsrcpdbmetric_history h
WHERE h.begin_time > SYSDATE - 7
GROUP BY h.con_name
ORDER BY avg_cpu_usage DESC;
7️⃣ 重要注意事项与最佳实践
-
多租户环境:此视图仅在多租户环境中有效,单租户环境中数据可能为空或不准确
-
资源管理器配置:只有在CDB级别配置了资源管理器时,相关指标才会被完整收集
-
数据时效性:视图中的数据是实时或近实时的,但不会永久保留
-
权限要求:查询此视图需要适当的系统权限,如
SELECT_CATALOG_ROLE -
性能监控建议:
- 定期监控各个PDB的资源使用趋势
- 设置适当的资源限制,防止单个PDB耗尽CDB资源
- 基于历史数据调整PDB的资源分配策略
- 监控资源争用情况,及时优化配置
-
常见问题诊断:
- 资源争用:当多个PDB竞争相同资源时,可能出现性能问题
- 资源不足:单个PDB资源使用过高可能影响其他PDB的性能
- 配置不当:资源限制设置不合理可能导致性能问题或资源浪费
通过深入分析 V$RSRCPDBMETRIC 视图,DBA可以全面了解多租户环境中各个PDB的资源使用情况,优化资源分配策略,确保整个CDB环境的稳定性和性能。
欢迎关注我的公众号《IT小Chen》

被折叠的 条评论
为什么被折叠?



