Skip to content

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:会话ID
  • USER_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:会话ID
  • STAT_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:会话ID
  • SQL_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:执行计划ID
  • OPERATION:操作类型
  • 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:会话ID
  • USER_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:数据文件ID
  • FILE_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:会话ID
  • WAIT_CLASS:等待事件类别
  • WAIT_EVENT:等待事件名称
  • WAIT_TIME:等待时间(毫秒)
  • P1:等待事件参数1
  • P2:等待事件参数2
  • P3:等待事件参数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;

应用场景

  • 监控共享池性能
  • 优化共享池配置
  • 识别共享池问题

性能视图使用最佳实践

  1. 组合使用多个视图:单一视图的信息有限,应结合多个相关视图进行综合分析
  2. 定期采集数据:性能数据具有时效性,应定期采集并保存,以便进行趋势分析
  3. 关注关键指标:重点关注与性能相关的关键指标,如CPU使用率、IO等待时间、缓存命中率等
  4. 使用SQL脚本自动化分析:编写SQL脚本自动化采集和分析性能数据,提高工作效率
  5. 结合AWR报告:将性能视图数据与AWR报告结合,获得更全面的性能分析
  6. 避免频繁查询:某些性能视图的查询可能会消耗系统资源,应避免过于频繁的查询
  7. 了解视图数据更新机制:不同视图的数据更新频率不同,了解其更新机制有助于正确解读数据
  8. 注意版本差异:不同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中的相关统计项了解。