
📊 Oracle V$ROLLSTAT 动态性能视图详解
1️⃣ 视图概述与作用
V$ROLLSTAT 是 Oracle 数据库中用于监控和诊断回滚段性能与使用情况的关键动态性能视图。它提供了每个回滚段的详细统计信息,包括空间使用情况、事务活动、性能指标等。这个视图是诊断回滚段相关问题、优化 UNDO 表空间配置和监控事务行为的核心工具。
2️⃣ 主要应用场景
- 性能监控与调优:监控回滚段的争用情况和使用效率
- 空间管理:跟踪 UNDO 表空间的使用情况和增长趋势
- 故障诊断:诊断"snapshot too old"、回滚段争用等问题
- 容量规划:基于历史使用数据规划 UNDO 表空间大小
- 事务分析:了解事务对回滚段的使用模式和压力
3️⃣ 字段详解
V$ROLLSTAT 包含丰富的字段,以下是主要字段的详细说明:
| 字段名称 | 数据类型 | 含义与说明 | 示例值 |
|---|---|---|---|
| USN | NUMBER | 回滚段编号。与V$ROLLNAME中的USN对应,唯一标识一个回滚段 | 1, 2, 3 |
| EXTENTS | NUMBER | 当前区段数。回滚段当前分配的区段数量 | 10, 25, 50 |
| RSSIZE | NUMBER | 当前大小(字节)。回滚段当前的总大小 | 10485760 |
| WRITES | NUMBER | 写入字节数。写入该回滚段的总字节数 | 524288000 |
| XACTS | NUMBER | 活动事务数。当前使用该回滚段的活动事务数量 | 3, 0, 1 |
| GETS | NUMBER | 获取次数。请求该回滚段头块的次数 | 15000 |
| WAITS | NUMBER | 等待次数。获取回滚段头块时发生等待的次数 | 15 |
| OPTSIZE | NUMBER | 最优大小(字节)。为回滚段设置的最优大小(如果设置了OPTIMAL参数) | 20971520 |
| HWMSIZE | NUMBER | 高水位标记(字节)。回滚段曾经达到的最大大小 | 15728640 |
| SHRINKS | NUMBER | 收缩次数。回滚段收缩到OPTIMAL大小的次数 | 5 |
| WRAPS | NUMBER | 环绕次数。回滚段内事务槽环绕的次数 | 12 |
| EXTENDS | NUMBER | 扩展次数。回滚段需要扩展的次数 | 8 |
| AVESHRINK | NUMBER | 平均收缩大小(字节)。平均每次收缩释放的字节数 | 1048576 |
| AVEACTIVE | NUMBER | 平均活动大小(字节)。活动事务使用的平均字节数 | 3145728 |
| STATUS | VARCHAR2(15) | 回滚段状态。回滚段的当前状态 | ONLINE, OFFLINE, PARTLY AVAILABLE |
| CUREXT | NUMBER | 当前区段。当前正在使用的区段号 | 5, 12, 8 |
| CURBLK | NUMBER | 当前块。当前正在使用的块号 | 128, 256, 512 |
4️⃣ 相关视图与基表
-
核心相关视图:
V$ROLLNAME:提供回滚段名称信息,通过USN字段关联V$TRANSACTION:显示当前活动事务的详细信息V$UNDOSTAT:提供UNDO表空间的统计信息(自动UNDO管理)DBA_ROLLBACK_SEGS:数据字典视图,显示所有回滚段的信息V$SESSION_WAIT:查看与会话相关的等待事件,包括回滚段等待
-
底层基表与存储原理:
V$ROLLSTAT的数据来源于内存中的 X$ 表结构(通常是X$KTRRSC或X$KTTRS)- 信息实时更新,反映当前实例的回滚段活动状态
- 与控制文件和UNDO表空间的结构紧密相关
5️⃣ 底层原理与知识点
回滚段内部架构
关键性能指标解析
-
GETS 和 WAITS:
GETS:请求回滚段头块的次数WAITS:获取头块时发生等待的次数- 争用比率 = (WAITS / GETS) * 100,应小于1%
-
EXTENDS 和 SHRINKS:
EXTENDS:回滚段需要扩展的次数,过多表示初始大小不足SHRINKS:回滚段收缩到OPTIMAL大小的次数- 频繁的扩展和收缩影响性能
-
WRAPS:
- 事务槽在回滚段内环绕的次数
- 过多WRAPS可能导致"snapshot too old"错误
-
RSSIZE 和 HWMSIZE:
RSSIZE:当前大小HWMSIZE:历史最大大小- 用于评估回滚段的空间需求
自动UNDO管理原理
在Oracle 19c中,默认使用自动UNDO管理:
- 系统自动创建和管理回滚段(命名为
_SYSSMU%) - 通过
UNDO_TABLESPACE参数指定UNDO表空间 - 使用
UNDO_RETENTION参数控制保留时间 - 自动调整回滚段数量和大小
6️⃣ 常用查询SQL示例
- 查看回滚段基本统计信息
SELECT rn.USN,
rn.NAME,
rs.EXTENTS,
ROUND(rs.RSSIZE/1024/1024, 2) AS CURRENT_SIZE_MB,
ROUND(rs.HWMSIZE/1024/1024, 2) AS HWM_SIZE_MB,
rs.XACTS AS ACTIVE_TRANS,
rs.STATUS
FROM V$ROLLNAME rn, V$ROLLSTAT rs
WHERE rn.USN = rs.USN
ORDER BY rn.USN;
- 监控回滚段争用情况
SELECT rn.USN,
rn.NAME,
rs.GETS,
rs.WAITS,
CASE WHEN rs.GETS > 0
THEN ROUND((rs.WAITS / rs.GETS) * 100, 2)
ELSE 0
END AS WAIT_RATIO,
rs.GETS - rs.WAITS AS SUCCESSFUL_GETS
FROM V$ROLLNAME rn, V$ROLLSTAT rs
WHERE rn.USN = rs.USN
AND rs.GETS > 0
ORDER BY WAIT_RATIO DESC;
- 分析回滚段空间使用趋势
SELECT rn.USN,
rn.NAME,
ROUND(rs.RSSIZE/1024/1024, 2) AS CURRENT_MB,
ROUND(rs.HWMSIZE/1024/1024, 2) AS MAX_EVER_MB,
ROUND(rs.AVEACTIVE/1024/1024, 2) AS AVG_ACTIVE_MB,
rs.EXTENDS,
rs.SHRINKS,
rs.WRAPS
FROM V$ROLLNAME rn, V$ROLLSTAT rs
WHERE rn.USN = rs.USN
ORDER BY rs.RSSIZE DESC;
- 诊断可能的问题回滚段
SELECT rn.USN,
rn.NAME,
rs.XACTS AS ACTIVE_TRANS,
rs.EXTENDS,
rs.SHRINKS,
rs.WRAPS,
CASE WHEN rs.GETS > 0
THEN ROUND((rs.WAITS / rs.GETS) * 100, 2)
ELSE 0
END AS WAIT_PCT,
rs.STATUS
FROM V$ROLLNAME rn, V$ROLLSTAT rs
WHERE rn.USN = rs.USN
AND (rs.EXTENDS > 10 OR rs.WRAPS > 20 OR
(rs.GETS > 0 AND (rs.WAITS / rs.GETS) > 0.01))
ORDER BY rs.EXTENDS DESC;
- 查看回滚段活动事务详情
SELECT rn.USN,
rn.NAME,
rs.XACTS AS ACTIVE_TRANSACTIONS,
t.SID,
s.USERNAME,
t.START_TIME,
t.USED_UBLK AS USED_BLOCKS,
t.USED_UREC AS USED_RECORDS
FROM V$ROLLNAME rn, V$ROLLSTAT rs, V$TRANSACTION t, V$SESSION s
WHERE rn.USN = rs.USN
AND rs.USN = t.XIDUSN
AND t.SES_ADDR = s.SADDR
ORDER BY rn.USN, t.USED_UBLK DESC;
7️⃣ 重要注意事项与最佳实践
-
性能监控关键阈值:
- 争用比率:WAITS/GETS > 1% 表示需要关注
- 扩展次数:频繁EXTENDS表明回滚段大小不足
- 收缩次数:频繁SHRINKS可能影响性能
-
空间管理建议:
- 监控
HWMSIZE以了解最大空间需求 - 设置适当的
UNDO_RETENTION参数(通常900-10800秒) - 定期检查UNDO表空间使用率
- 监控
-
常见问题解决:
- ORA-01555 snapshot too old:增加
UNDO_RETENTION或UNDO表空间大小 - 回滚段争用:增加回滚段数量(通过增加UNDO表空间大小)
- 空间不足:扩展UNDO表空间或增加数据文件
- ORA-01555 snapshot too old:增加
-
自动UNDO管理最佳实践:
- 使用
UNDO_MANAGEMENT = AUTO(Oracle 19c默认) - 合理设置
UNDO_RETENTION基于业务需求 - 监控
V$UNDOSTAT视图获取UNDO表空间整体情况
- 使用
通过深入分析 V$ROLLSTAT 视图,DBA可以全面了解回滚段的性能状况,及时发现潜在问题,并优化数据库的事务处理性能。这个视图是维护数据库健康运行的重要工具之一。
欢迎关注我的公众号《IT小Chen》
Oracle V$ROLLSTAT视图深度解析
2115

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



