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
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 关键指标
| 指标 | 工具 | 阈值 |
|---|---|---|
| CPU | OEM/OS | 80% |
| 内存 | v$sga/v$pga | 80% |
| 表空间 | SQL | 80% |
| AAS | v$sysmetric | CPU 数 |
| 响应时间 | AWR | 基线 |
| 锁等待 | v$session | 60s |
| 备份 | RMAN | 失败立即 |
11.2 健康检查
- 实例状态
- 表空间
- 备份
- 锁
- 性能
- 错误日志
12. 常见坑与排错
12.1 工具选择
- 实时:v$ 视图 + ASH
- 短期:ASH 报告
- 长期:AWR 报告
- 深度:10046/10053
12.2 报告生成
# 时段精准
# 快照对应
13. 最佳实践
- 多工具结合:综合
- 定期 AWR:日常
- ASH 短期:实时
- OEM 集中:多库
- 关键指标告警:及时
- 基线对比:异常
- 自定义脚本:业务
- 第三方补充:丰富
- 文档化:积累
- 持续改进:循环
14. 参考资料
[1] Oracle Database Performance Tuning Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/