Oracle 性能监控工具集

Oracle 性能监控工具集

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 性能监控工具集[1]:

分类

  • 数据库内置
  • 图形化(OEM)
  • 命令行
  • 第三方

2. 数据库内置

2.1 AWR

@?/rdbms/admin/awrrpt.sql
@?/rdbms/admin/awrgrpt.sql  -- RAC
@?/rdbms/admin/awrddrpt.sql  -- 对比

详细见:Oracle AWR 报告深度分析

2.2 ASH

@?/rdbms/admin/ashrpt.sql

详细见:Oracle ASH 报告深度分析

2.3 ADDM

@?/rdbms/admin/addmrpt.sql

2.4 Statspack

@?/rdbms/admin/spcreate.sql
@?/rdbms/admin/spreport.sql

详细见:Oracle Statspack 性能报告

2.5 SQL Monitor

SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => '&sql_id') FROM dual;

详细见:Oracle SQL Monitoring 实时监控


3. 常用视图

3.1 会话

-- v$session
SELECT sid, serial#, username, status, event, sql_id 
FROM v$session WHERE username IS NOT NULL;

-- v$process
SELECT * FROM v$process;

-- v$sql
SELECT sql_id, sql_text, elapsed_time, executions 
FROM v$sql ORDER BY elapsed_time DESC;

-- v$sqlarea
SELECT * FROM v$sqlarea;

详细见:Oracle 性能监控视图大全

3.2 等待

-- v$session_wait
SELECT * FROM v$session_wait;

-- v$system_event
SELECT * FROM v$system_event WHERE wait_class != 'Idle';

-- v$eventmetric
SELECT * FROM v$eventmetric;

3.3 系统统计

-- v$sysstat
SELECT name, value FROM v$sysstat WHERE name LIKE '%...%';

-- v$sysmetric
SELECT * FROM v$sysmetric;

-- v$sysmetric_summary
SELECT * FROM v$sysmetric_summary;

3.4 锁

-- v$lock
SELECT * FROM v$lock WHERE type IN ('TM', 'TX');

-- v$locked_object
SELECT * FROM v$locked_object;

4. OEM Cloud Control

4.1 监控

  • 实时性能
  • 历史趋势
  • 告警

4.2 报告

  • AWR
  • ASH
  • ADDM
  • 自定义

4.3 优势

  • 图形化
  • 多库集中
  • 自动化

5. SQL Tuning Advisor

DECLARE
  v_task VARCHAR2(100);
BEGIN
  v_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => '&sql_id');
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(v_task);
END;
/

SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('&task') FROM dual;

详细见:Oracle SQL 调优顾问


6. 10046 事件

ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
-- 执行
ALTER SESSION SET EVENTS '10046 trace name context off';
tkprof ...

详细见:Oracle 10046 事件与 SQL Trace


7. ORA-10053 事件

-- 优化器 trace
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';
EXPLAIN PLAN FOR ...;
ALTER SESSION SET EVENTS '10053 trace name context off';

详细见:Oracle 优化器 CBO 原理


8. 常用脚本

8.1 Top SQL

-- Top 10 by elapsed
SELECT sql_id, sql_text, elapsed_time / 1000000 AS sec, executions
FROM v$sql 
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;

8.2 阻塞会话

SELECT 
  blocking_session, 
  sid, 
  event, 
  seconds_in_wait,
  sql_id
FROM v$session
WHERE blocking_session IS NOT NULL;

8.3 表空间

SELECT 
  tablespace_name,
  ROUND(SUM(bytes) / 1024 / 1024 / 1024, 2) AS gb
FROM dba_data_files
GROUP BY tablespace_name;

8.4 实例状态

SELECT 
  instance_name, 
  status, 
  database_status,
  startup_time
FROM v$instance;

9. 第三方工具

9.1 Spotlight

  • 图形化
  • 实时

9.2 Toad

  • 开发管理
  • 调优

9.3 PL/SQL Developer

  • 开发
  • 调试

9.4 Prometheus + Grafana

  • 自定义监控
  • 告警

10. 自定义脚本

10.1 监控脚本

#!/bin/bash
# check_db.sh
sqlplus -s / as sysdba <<EOF
SELECT 
  tablespace_name, 
  ROUND(used / total * 100, 2) AS pct
FROM (
  SELECT 
    df.tablespace_name,
    SUM(df.bytes) AS total,
    SUM(df.bytes - NVL(fs.bytes, 0)) AS used
  FROM dba_data_files df, dba_free_space fs
  WHERE df.file_id = fs.file_id(+)
  GROUP BY df.tablespace_name
)
WHERE used / total > 0.8;
EOF

10.2 调度

# crontab
0 * * * * /u01/scripts/check_db.sh

11. 监控指标

11.1 关键指标

指标工具阈值
CPUOEM/OS80%
内存v$sga/v$pga80%
表空间SQL80%
AASv$sysmetricCPU 数
响应时间AWR基线
锁等待v$session60s
备份RMAN失败立即

11.2 健康检查

  • 实例状态
  • 表空间
  • 备份
  • 性能
  • 错误日志

12. 常见坑与排错

12.1 工具选择

- 实时:v$ 视图 + ASH
- 短期:ASH 报告
- 长期:AWR 报告
- 深度:10046/10053

12.2 报告生成

# 时段精准
# 快照对应

13. 最佳实践

  1. 多工具结合:综合
  2. 定期 AWR:日常
  3. ASH 短期:实时
  4. OEM 集中:多库
  5. 关键指标告警:及时
  6. 基线对比:异常
  7. 自定义脚本:业务
  8. 第三方补充:丰富
  9. 文档化:积累
  10. 持续改进:循环

14. 参考资料

[1] Oracle Database Performance Tuning Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/