
📊 Oracle V$ROWCACHE_SUBORDINATE 动态性能视图详解
1️⃣ 视图概述与作用
V$ROWCACHE_SUBORDINATE 是 Oracle 数据库中用于深入监控数据字典缓存中子条目详细信息的动态性能视图。它提供了比 V$ROWCACHE 和 V$ROWCACHE_PARENT 更细粒度的信息,主要展示数据字典缓存中子缓存条目(Subordinate Cache Entries) 的详细状态和统计信息。
核心作用:
- 监控数据字典缓存中子条目的状态和活动情况
- 诊断由子缓存条目争用或异常引起的性能问题
- 分析数据字典缓存的内部层次结构和管理机制
- 作为
V$ROWCACHE_PARENT的补充,提供完整的缓存层次诊断信息
2️⃣ 主要应用场景
- 深度性能诊断:当父缓存条目显示异常时,深入分析其子条目的具体情况
- 缓存机制研究:理解数据字典缓存中父子条目的关系和交互机制
- 复杂性能问题排查:处理复杂的库缓存或行缓存相关性能问题时使用
- Oracle内部原理学习:深入了解Oracle如何管理数据字典缓存的具体实现
3️⃣ 字段详解
以下是 V$ROWCACHE_SUBORDINATE 视图的主要字段说明:
| 字段名称 | 数据类型 | 含义与说明 | 示例值 |
|---|---|---|---|
| HASH | NUMBER | 子缓存条目的哈希值。用于在缓存中唯一标识和查找该子条目 | 123456789 |
| ADDRESS | RAW(4 | 8) | 子缓存条目的内存地址。指向该子条目在SGA中的实际内存位置 | C0000000F1A3B8 |
| CACHE# | NUMBER | 关联的缓存标识符。与 V$ROWCACHE.CACHE# 对应,指明此子条目属于哪个具体的行缓存子项 | 7 |
| PARENT_HASH | NUMBER | 父缓存条目的哈希值。标识此子条目所属的父条目 | 987654321 |
| PARENT_ADDRESS | RAW(4 | 8) | 父缓存条目的内存地址。指向父条目在SGA中的内存位置 | C0000000F1A3C0 |
| TYPE | VARCHAR2(11) | 子条目的类型。标识此子条目在其缓存类型中的具体角色或属性 | SUBORDINATE |
| SUBORDINATE# | NUMBER | 子条目编号。在同一父条目下的子条目编号 | 0, 1, 2 |
| KEY | VARCHAR2(256) | 缓存键值。标识此子缓存条目所代表的具体数据 | COL#:1, PART#:1 |
| EXCLUSIVE_GETS | NUMBER | 独占模式获取次数。以独占模式访问此子条目的次数 | 50 |
| SHARED_GETS | NUMBER | 共享模式获取次数。以共享模式访问此子条目的次数 | 5000 |
| MISSES | NUMBER | 未命中次数。请求此子条目但未在缓存中找到的次数 | 15 |
| LOCK_REQUESTS | NUMBER | 锁请求次数。为访问此子条目而请求内部锁的次数 | 200 |
| LOCK_WAITS | NUMBER | 锁等待次数。请求内部锁时发生等待的次数 | 3 |
| PIN_REQUESTS | NUMBER | 钉住(Pin)请求次数。请求"钉住"此子条目的次数 | 5500 |
| PIN_WAITS | NUMBER | 钉住(Pin)等待次数。钉住请求时发生等待的次数 | 2 |
| INVALIDATIONS | NUMBER | 失效次数。该子条目被标记为无效的次数 | 1 |
| FLAGS | NUMBER | 状态标志位。表示子条目的各种内部状态 | 0, 1 |
4️⃣ 相关视图与基表
-
核心相关视图:
V$ROWCACHE:提供行缓存的汇总统计信息V$ROWCACHE_PARENT:提供父缓存条目的详细信息V$LIBRARYCACHE:监控库缓存的活动信息V$LATCH和V$LATCH_CHILDREN:检查与行缓存访问相关的闩锁争用
-
底层基表与存储原理:
V$ROWCACHE_SUBORDINATE的数据来源于内存中的内部 X$ 表(通常是X$KQRST或类似结构)- 信息存储在系统全局区(SGA)的共享池中
- 数据是动态和实时的,反映当前实例中行缓存子条目的状态
- 数据是易失性的,实例关闭后不会持久化
5️⃣ 底层原理与知识点
数据字典缓存层次结构
子缓存条目的角色和功能
- 存储派生数据:子条目通常包含从父条目派生的更详细的信息
- 细化数据管理:允许更精细的数据管理和缓存策略
- 提高并发性:通过子条目可以实现更细粒度的并发控制
- 优化内存使用:根据需要加载和卸载子条目,优化内存使用
性能关联指标
- 锁等待:高
LOCK_WAITS值表示子条目存在争用 - 钉住等待:高
PIN_WAITS值表示子条目被频繁访问 - 未命中率:高
MISSES值表示子条目经常不在缓存中 - 失效次数:高
INVALIDATIONS值表示子条目频繁失效
6️⃣ 常用查询SQL示例
- 查看特定父条目的所有子条目
SELECT s.hash,
s.key,
s.exclusive_gets,
s.shared_gets,
s.misses,
s.lock_waits,
s.pin_waits
FROM v$rowcache_subordinate s
WHERE s.parent_hash = &parent_hash_value
ORDER BY s.shared_gets DESC;
- 查找存在显著争用的子条目
SELECT s.cache#,
s.key,
s.lock_requests,
s.lock_waits,
ROUND((s.lock_waits / GREATEST(s.lock_requests, 1)) * 100, 2) AS lock_wait_pct,
p.key AS parent_key
FROM v$rowcache_subordinate s
JOIN v$rowcache_parent p ON s.parent_hash = p.hash
WHERE s.lock_waits > 0
ORDER BY lock_wait_pct DESC;
- 分析子条目的访问模式
SELECT s.cache#,
s.key,
(s.exclusive_gets + s.shared_gets) AS total_access,
s.exclusive_gets,
s.shared_gets,
s.misses,
ROUND((s.misses / GREATEST((s.exclusive_gets + s.shared_gets), 1)) * 100, 2) AS miss_ratio
FROM v$rowcache_subordinate s
WHERE (s.exclusive_gets + s.shared_gets) > 1000
ORDER BY total_access DESC;
- 结合父条目信息分析缓存使用情况
SELECT p.key AS parent_key,
s.key AS child_key,
s.exclusive_gets,
s.shared_gets,
s.misses,
s.lock_waits,
s.pin_waits
FROM v$rowcache_subordinate s
JOIN v$rowcache_parent p ON s.parent_hash = p.hash
WHERE p.cache# = (SELECT DISTINCT cache#
FROM v$rowcache
WHERE parameter = 'dc_objects')
ORDER BY s.shared_gets DESC;
- 监控高频访问的子条目
SELECT s.cache#,
s.key,
(s.exclusive_gets + s.shared_gets) AS total_access,
s.exclusive_gets,
s.shared_gets,
s.misses,
p.key AS parent_key
FROM v$rowcache_subordinate s
JOIN v$rowcache_parent p ON s.parent_hash = p.hash
ORDER BY total_access DESC
FETCH FIRST 20 ROWS ONLY;
7️⃣ 重要注意事项与最佳实践
-
诊断用途:
V$ROWCACHE_SUBORDINATE是一个主要用于深度诊断的视图,在日常性能监控中较少使用 -
数据易失性:该视图中的数据存在于内存中且不断变化,实例重启后数据会丢失
-
性能开销:频繁查询此视图可能对性能产生轻微影响,应在需要时才使用
-
权限要求:查询此视图需要
SELECT权限 onV_$ROWCACHE_SUBORDINATE -
结合其他视图:需要与
V$ROWCACHE和V$ROWCACHE_PARENT结合使用,才能获得完整的行缓存性能视图 -
常见问题线索:
- 高
LOCK_WAITS:表明对特定子条目的争用 - 高
MISSES:可能与共享池大小不足或大量硬解析有关 - 高
INVALIDATIONS:频繁的DDL操作会导致此值升高
- 高
-
最佳实践:
- 首先监控
V$ROWCACHE的汇总指标 - 发现异常后再深入分析
V$ROWCACHE_PARENT和V$ROWCACHE_SUBORDINATE - 结合业务场景分析缓存使用模式
- 定期检查并优化共享池配置
- 首先监控
通过深入分析 V$ROWCACHE_SUBORDINATE 视图,DBA可以更全面地了解数据字典缓存的内部工作机制,及时发现和解决性能问题。这个视图是Oracle数据库性能诊断工具链中的重要组成部分。
欢迎关注我的公众号《IT小Chen》
547

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



