外观
DM 性能视图
系统级性能视图
V$SYSSTAT
作用:提供系统级别的统计信息,包括CPU使用率、内存使用、IO操作、网络流量等。
关键列说明:
STAT_NAME:统计项名称STAT_VALUE:统计项当前值CLASS:统计项类别TYPE:统计项类型
查询示例:
sql
-- 查看系统CPU使用率相关统计
SELECT * FROM V$SYSSTAT WHERE STAT_NAME LIKE '%CPU%';
-- 查看系统IO相关统计
SELECT * FROM V$SYSSTAT WHERE STAT_NAME LIKE '%IO%';
-- 查看系统内存使用统计
SELECT * FROM V$SYSSTAT WHERE STAT_NAME LIKE '%MEMORY%';应用场景:
- 监控系统整体性能
- 识别系统级瓶颈
- 性能趋势分析
V$SYSINFO
作用:提供数据库系统的基本信息,包括版本、实例名、启动时间等。
关键列说明:
INFO_NAME:信息项名称INFO_VALUE:信息项值
查询示例:
sql
-- 查看数据库版本和实例信息
SELECT * FROM V$SYSINFO WHERE INFO_NAME IN ('VERSION', 'INSTANCE_NAME', 'START_TIME');应用场景:
- 获取数据库基本信息
- 确认数据库版本和配置
V$MEMORY
作用:提供数据库内存使用情况的详细信息。
关键列说明:
NAME:内存池名称TOTAL:总内存大小(KB)USED:已使用内存大小(KB)FREE:空闲内存大小(KB)USED_RATE:内存使用率
查询示例:
sql
-- 查看内存使用情况
SELECT * FROM V$MEMORY ORDER BY USED_RATE DESC;
-- 查看共享内存池使用情况
SELECT * FROM V$MEMORY WHERE NAME LIKE '%SHARED%';应用场景:
- 监控内存使用情况
- 优化内存配置
- 识别内存泄漏
V$SESSIONS
作用:提供当前所有会话的详细信息。
关键列说明:
SESSION_ID:会话IDUSER_NAME:用户名APPLICATION_NAME:应用程序名称CLIENT_IP:客户端IP地址STATUS:会话状态CPU_TIME:CPU使用时间(毫秒)IDLE_TIME:空闲时间(秒)WAIT_EVENT:当前等待事件
查询示例:
sql
-- 查看活跃会话
SELECT * FROM V$SESSIONS WHERE STATUS = 'ACTIVE';
-- 查看消耗CPU最多的会话
SELECT * FROM V$SESSIONS ORDER BY CPU_TIME DESC;
-- 查看等待事件最多的会话
SELECT * FROM V$SESSIONS WHERE WAIT_EVENT IS NOT NULL;应用场景:
- 监控活跃会话
- 识别异常会话
- 分析会话资源消耗
会话级性能视图
V$SESSSTAT
作用:提供每个会话的统计信息,包括SQL执行次数、IO操作、网络流量等。
关键列说明:
SESSION_ID:会话IDSTAT_NAME:统计项名称STAT_VALUE:统计项当前值
查询示例:
sql
-- 查看指定会话的统计信息
SELECT * FROM V$SESSSTAT WHERE SESSION_ID = 12345;
-- 查看所有会话的SQL执行次数
SELECT SESSION_ID, STAT_VALUE AS SQL_EXECUTIONS
FROM V$SESSSTAT
WHERE STAT_NAME = 'SQL EXECUTIONS';应用场景:
- 分析单个会话的性能
- 识别资源消耗大的会话
- 会话级性能调优
V$SQL_HISTORY
作用:提供会话执行过的SQL语句历史记录。
关键列说明:
SESSION_ID:会话IDSQL_TEXT:SQL语句文本EXECUTE_TIME:执行时间(毫秒)START_TIME:开始执行时间END_TIME:结束执行时间
查询示例:
sql
-- 查看指定会话的SQL执行历史
SELECT * FROM V$SQL_HISTORY WHERE SESSION_ID = 12345 ORDER BY START_TIME DESC;
-- 查看执行时间超过1秒的SQL语句
SELECT * FROM V$SQL_HISTORY WHERE EXECUTE_TIME > 1000 ORDER BY EXECUTE_TIME DESC;应用场景:
- 分析会话执行的SQL语句
- 识别慢SQL
- 跟踪会话活动
SQL级性能视图
V$SQL_STATISTICS
作用:提供SQL语句的执行统计信息,包括执行次数、响应时间、资源消耗等。
关键列说明:
SQL_ID:SQL语句唯一标识符SQL_TEXT:SQL语句文本EXECUTIONS:执行次数TOTAL_TIME:总执行时间(毫秒)AVG_TIME:平均执行时间(毫秒)CPU_TIME:CPU使用时间(毫秒)IO_WAIT_TIME:IO等待时间(毫秒)BUFFER_GETS:逻辑读次数DISK_READS:物理读次数
查询示例:
sql
-- 查看执行次数最多的SQL
SELECT * FROM V$SQL_STATISTICS ORDER BY EXECUTIONS DESC;
-- 查看平均执行时间最长的SQL
SELECT * FROM V$SQL_STATISTICS ORDER BY AVG_TIME DESC;
-- 查看消耗CPU最多的SQL
SELECT * FROM V$SQL_STATISTICS ORDER BY CPU_TIME DESC;应用场景:
- 识别高频执行的SQL
- 发现慢SQL
- 分析SQL资源消耗
V$SQL_PLAN
作用:提供SQL语句的执行计划信息。
关键列说明:
SQL_ID:SQL语句唯一标识符PLAN_ID:执行计划IDOPERATION:操作类型OPTIONS:操作选项OBJECT_NAME:对象名称OBJECT_TYPE:对象类型DEPTH:执行计划深度POSITION:执行位置COST:估计成本CARDINALITY:估计行数
查询示例:
sql
-- 查看指定SQL的执行计划
SELECT * FROM V$SQL_PLAN WHERE SQL_ID = '1234567890ABCDEF' ORDER BY ID;
-- 查看所有SQL的执行计划
SELECT SQL_ID, OPERATION, OBJECT_NAME, COST FROM V$SQL_PLAN;应用场景:
- 分析SQL执行计划
- 优化SQL语句
- 识别执行计划问题
V$SLOW_SQL
作用:提供慢SQL语句的详细信息。
关键列说明:
SQL_ID:SQL语句唯一标识符SQL_TEXT:SQL语句文本EXECUTE_TIME:执行时间(毫秒)START_TIME:开始执行时间SESSION_ID:会话IDUSER_NAME:用户名CLIENT_IP:客户端IP地址
查询示例:
sql
-- 查看最近的慢SQL记录
SELECT * FROM V$SLOW_SQL ORDER BY START_TIME DESC;
-- 查看执行时间超过5秒的慢SQL
SELECT * FROM V$SLOW_SQL WHERE EXECUTE_TIME > 5000;应用场景:
- 监控慢SQL
- 分析慢SQL原因
- 优化慢SQL
存储级性能视图
V$DATAFILE
作用:提供数据文件的详细信息,包括大小、使用情况、状态等。
关键列说明:
FILE_ID:数据文件IDFILE_NAME:数据文件名称TABLESPACE_NAME:表空间名称BYTES:数据文件总大小(字节)BLOCKS:数据文件总块数STATUS:数据文件状态ONLINE_STATUS:在线状态
查询示例:
sql
-- 查看所有数据文件信息
SELECT * FROM V$DATAFILE;
-- 查看指定表空间的数据文件
SELECT * FROM V$DATAFILE WHERE TABLESPACE_NAME = 'MAIN';
-- 查看数据文件使用情况
SELECT FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB
FROM V$DATAFILE;应用场景:
- 监控数据文件大小
- 管理表空间
- 规划存储扩展
V$TABLESPACE
作用:提供表空间的详细信息,包括大小、使用情况、状态等。
关键列说明:
TABLESPACE_NAME:表空间名称TOTAL_BYTES:表空间总大小(字节)USED_BYTES:已使用大小(字节)FREE_BYTES:空闲大小(字节)USED_RATE:使用率STATUS:表空间状态
查询示例:
sql
-- 查看所有表空间使用情况
SELECT * FROM V$TABLESPACE;
-- 查看使用率超过80%的表空间
SELECT * FROM V$TABLESPACE WHERE USED_RATE > 80;应用场景:
- 监控表空间使用情况
- 识别空间不足的表空间
- 规划表空间扩展
V$DISK_STAT
作用:提供磁盘I/O统计信息。
关键列说明:
DISK_NAME:磁盘名称READS:读操作次数WRITES:写操作次数READ_BYTES:读字节数WRITE_BYTES:写字节数READ_TIME:读操作总时间(毫秒)WRITE_TIME:写操作总时间(毫秒)
查询示例:
sql
-- 查看磁盘I/O统计
SELECT * FROM V$DISK_STAT;
-- 计算磁盘读写速率
SELECT DISK_NAME,
READ_BYTES/1024/1024 AS READ_MB,
WRITE_BYTES/1024/1024 AS WRITE_MB,
(READ_TIME + WRITE_TIME) AS TOTAL_IO_TIME
FROM V$DISK_STAT;应用场景:
- 监控磁盘I/O性能
- 识别I/O瓶颈
- 优化存储配置
等待事件视图
V$SESSION_WAIT
作用:提供会话等待事件的详细信息,包括等待类型、等待时间、等待资源等。
关键列说明:
SESSION_ID:会话IDWAIT_CLASS:等待事件类别WAIT_EVENT:等待事件名称WAIT_TIME:等待时间(毫秒)P1:等待事件参数1P2:等待事件参数2P3:等待事件参数3
查询示例:
sql
-- 查看所有等待事件
SELECT * FROM V$SESSION_WAIT;
-- 按等待事件分组统计
SELECT WAIT_EVENT, COUNT(*) AS WAIT_COUNT
FROM V$SESSION_WAIT
GROUP BY WAIT_EVENT
ORDER BY WAIT_COUNT DESC;
-- 查看IO等待事件
SELECT * FROM V$SESSION_WAIT WHERE WAIT_CLASS = 'IO';应用场景:
- 识别会话等待事件
- 分析性能瓶颈
- 优化等待事件
V$SYSTEM_WAIT_CLASS
作用:提供系统级别的等待事件统计信息。
关键列说明:
WAIT_CLASS:等待事件类别WAIT_COUNT:等待次数WAIT_TIME:总等待时间(毫秒)AVG_WAIT_TIME:平均等待时间(毫秒)
查询示例:
sql
-- 查看系统等待事件统计
SELECT * FROM V$SYSTEM_WAIT_CLASS;
-- 查看等待时间最长的等待类别
SELECT * FROM V$SYSTEM_WAIT_CLASS ORDER BY WAIT_TIME DESC;应用场景:
- 分析系统级等待事件
- 识别主要等待类别
- 系统级性能优化
内存相关视图
V$BUFFERPOOL
作用:提供缓冲池的详细信息,包括大小、使用情况、命中率等。
关键列说明:
POOL_NAME:缓冲池名称TOTAL_BLOCKS:总块数FREE_BLOCKS:空闲块数USED_BLOCKS:已使用块数DIRTY_BLOCKS:脏块数HIT_RATE:命中率
查询示例:
sql
-- 查看缓冲池使用情况
SELECT * FROM V$BUFFERPOOL;
-- 查看缓冲池命中率
SELECT POOL_NAME, HIT_RATE FROM V$BUFFERPOOL;应用场景:
- 监控缓冲池性能
- 优化缓冲池配置
- 提高缓存命中率
V$SHARED_POOL
作用:提供共享池的详细信息,包括大小、使用情况、命中率等。
关键列说明:
COMPONENT:共享池组件名称TOTAL_SIZE:总大小(字节)USED_SIZE:已使用大小(字节)FREE_SIZE:空闲大小(字节)USED_RATE:使用率
查询示例:
sql
-- 查看共享池使用情况
SELECT * FROM V$SHARED_POOL;
-- 查看共享池组件使用情况
SELECT COMPONENT, USED_RATE FROM V$SHARED_POOL ORDER BY USED_RATE DESC;应用场景:
- 监控共享池性能
- 优化共享池配置
- 识别共享池问题
性能视图使用最佳实践
- 组合使用多个视图:单一视图的信息有限,应结合多个相关视图进行综合分析
- 定期采集数据:性能数据具有时效性,应定期采集并保存,以便进行趋势分析
- 关注关键指标:重点关注与性能相关的关键指标,如CPU使用率、IO等待时间、缓存命中率等
- 使用SQL脚本自动化分析:编写SQL脚本自动化采集和分析性能数据,提高工作效率
- 结合AWR报告:将性能视图数据与AWR报告结合,获得更全面的性能分析
- 避免频繁查询:某些性能视图的查询可能会消耗系统资源,应避免过于频繁的查询
- 了解视图数据更新机制:不同视图的数据更新频率不同,了解其更新机制有助于正确解读数据
- 注意版本差异:不同DM版本的性能视图可能存在差异,应参考对应版本的文档
性能视图查询示例
系统性能综合查询
sql
-- 综合查询系统性能
SELECT
(SELECT STAT_VALUE FROM V$SYSSTAT WHERE STAT_NAME = 'CPU USED TIME') AS CPU_USED_TIME,
(SELECT STAT_VALUE FROM V$SYSSTAT WHERE STAT_NAME = 'TOTAL PHYSICAL READS') AS PHYSICAL_READS,
(SELECT STAT_VALUE FROM V$SYSSTAT WHERE STAT_NAME = 'TOTAL PHYSICAL WRITES') AS PHYSICAL_WRITES,
(SELECT COUNT(*) FROM V$SESSIONS WHERE STATUS = 'ACTIVE') AS ACTIVE_SESSIONS,
(SELECT COUNT(*) FROM V$SESSION_WAIT) AS WAITING_SESSIONS
FROM DUAL;慢SQL分析
sql
-- 分析慢SQL
SELECT
S.SQL_ID,
S.SQL_TEXT,
S.EXECUTE_TIME,
P.OPERATION,
P.OBJECT_NAME,
P.COST
FROM V$SLOW_SQL S
LEFT JOIN V$SQL_PLAN P ON S.SQL_ID = P.SQL_ID
WHERE S.EXECUTE_TIME > 1000
ORDER BY S.EXECUTE_TIME DESC;表空间使用情况
sql
-- 表空间使用情况报告
SELECT
T.TABLESPACE_NAME,
T.TOTAL_BYTES / 1024 / 1024 AS TOTAL_MB,
T.USED_BYTES / 1024 / 1024 AS USED_MB,
T.FREE_BYTES / 1024 / 1024 AS FREE_MB,
T.USED_RATE AS USED_PERCENT
FROM V$TABLESPACE T
ORDER BY T.USED_RATE DESC;版本差异说明
| 版本 | 主要变化 |
|---|---|
| DM 7 | 基础性能视图完善,支持系统级、会话级和SQL级性能监控 |
| DM 8 | 增强了等待事件视图,添加了更多性能指标 |
| DM 8.1 | 新增了AWR报告相关视图,优化了性能视图的查询性能 |
常见问题(FAQ)
Q1: 如何选择合适的性能视图进行分析?
A1: 选择性能视图应根据分析目标确定:
- 系统整体性能分析:使用V$SYSSTAT、V$SYSINFO、V$MEMORY
- 会话级分析:使用V$SESSIONS、V$SESSSTAT、V$SQL_HISTORY
- SQL性能分析:使用V$SQL_STATISTICS、V$SQL_PLAN、V$SLOW_SQL
- 存储性能分析:使用V$DATAFILE、V$TABLESPACE、V$DISK_STAT
- 等待事件分析:使用V$SESSION_WAIT、V$SYSTEM_WAIT_CLASS
Q2: 性能视图的数据是实时的吗?
A2: 大部分性能视图的数据是实时更新的,反映了数据库当前的运行状态。但某些统计信息可能会定期刷新,不是完全实时的。具体更新频率取决于视图类型和数据库配置。
Q3: 查询性能视图会影响数据库性能吗?
A3: 查询性能视图本身会消耗一定的系统资源,但影响通常很小。然而,如果频繁查询某些复杂的性能视图,可能会对数据库性能产生一定影响。建议合理安排查询频率,避免在高峰期进行大量性能视图查询。
Q4: 如何保存性能视图的历史数据?
A4: 可以通过以下方法保存性能视图的历史数据:
- 编写SQL脚本定期采集性能数据并保存到表中
- 使用DM的AWR报告功能自动保存性能数据
- 使用第三方监控工具采集和保存性能数据
- 手动导出性能视图数据到文件
Q5: 如何解读性能视图中的数据?
A5: 解读性能视图数据需要结合数据库的实际情况和业务场景:
- 关注关键指标的变化趋势,而不仅仅是当前值
- 将多个相关视图的数据结合起来分析
- 与历史数据进行比较,识别异常变化
- 参考DM官方文档中对各视图和指标的解释
- 根据业务特点确定合理的阈值
Q6: 性能视图中的数据单位是什么?
A6: 不同性能视图的数据单位可能不同:
- 时间相关指标:通常为毫秒(ms)
- 大小相关指标:通常为字节(byte)或块(block)
- 计数相关指标:通常为次数
- 比率相关指标:通常为百分比或小数
在查询时,建议根据需要进行单位转换,以便于理解和分析。
Q7: 如何优化性能视图的查询性能?
A7: 可以通过以下方法优化性能视图的查询:
- 只查询需要的列,避免使用SELECT *
- 使用WHERE子句过滤不必要的数据
- 避免在性能视图上创建索引(系统视图不允许)
- 合理安排查询频率,避免过于频繁的查询
- 结合使用多个简单查询,而不是一个复杂查询
Q8: 性能视图中的数据多久更新一次?
A8: 不同性能视图的数据更新频率不同:
- 系统统计信息:通常每秒更新一次
- 会话统计信息:实时更新
- SQL统计信息:SQL执行完成后更新
- 等待事件:实时更新
- 存储统计信息:定期更新(通常每分钟)
具体更新频率可以通过查询V$SYSSTAT中的相关统计项了解。
