Oracle 性能基线建立
Oracle 性能基线建立
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
性能基线是性能评估与优化的基础[1]:
详细见:Oracle AWR 详解、Oracle 数据库健康检查。
2. 基线类型
2.1 AWR 基线
-- 创建
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 100,
end_snap_id => 110,
baseline_name => 'peak_baseline',
expiration => 30
);
2.2 模板基线
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE(
day_of_week => 'MONDAY',
hour_in_day => 9,
duration => 8,
expiration => 365,
start_time => TO_DATE('2026-07-21 09:00', 'YYYY-MM-DD HH24:MI'),
end_time => TO_DATE('2026-07-21 18:00', 'YYYY-MM-DD HH24:MI'),
baseline_name => 'workday_baseline'
);
2.3 移动窗口
ALTER SYSTEM SET db_keep_cache_size = 0;
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 43200);
3. 关键指标
3.1 吞吐量
SELECT snap_id,
ROUND(value, 2) AS transactions_per_sec
FROM dba_hist_sysmetric_history
WHERE metric_name = 'User Transaction Per Sec'
ORDER BY snap_id DESC FETCH FIRST 30 ROWS ONLY;
3.2 响应时间
SELECT snap_id,
ROUND(value, 2) AS response_time_ms
FROM dba_hist_sysmetric_history
WHERE metric_name = 'SQL Service Response Time'
ORDER BY snap_id DESC;
3.3 DB Time
SELECT snap_id,
ROUND(value/100, 2) AS db_time_per_sec
FROM dba_hist_sysmetric_history
WHERE metric_name = 'Database Time Per Sec'
ORDER BY snap_id DESC;
4. 性能采集
4.1 AWR 快照
-- 手动
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
-- 自动(默认 1 小时)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
interval => 30,
retention => 43200
);
4.2 关键时段
# 业务高峰前手动快照
sqlplus / as sysdba << EOF
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
EOF
# 高峰后再次
sqlplus / as sysdba << EOF
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
EOF
4.3 STATISTICS_LEVEL
ALTER SYSTEM SET statistics_level = ALL SCOPE=SPFILE;
5. 指标体系
5.1 数据库
- DB Time / CPU
- Active Sessions
- Hard Parse
- Logical Reads
- Physical Reads/Writes
5.2 SQL
- Top SQL(elapsed time)
- Top SQL(CPU)
- Top SQL(buffer gets)
- Top SQL(disk reads)
- Top SQL(executions)
5.3 等待事件
- db file sequential read
- db file scattered read
- log file sync
- enq: TX - row lock
- buffer busy waits
详细见:Oracle 等待事件详解。
5.4 资源
- CPU 使用率
- 内存使用
- I/O 延迟
- 网络
6. AWR 报告对比
6.1 命令
@?/rdbms/admin/awrddrpt.sql
6.2 关键对比
- DB Time
- Top 等待事件
- Top SQL
- 资源使用
详细见:Oracle AWR 详解。
7. ADDM
7.1 自动
- 每个快照后自动运行
- ADDM 报告
- 优化建议
7.2 命令
@?/rdbms/admin/addmrpt.sql
7.3 跨快照
DECLARE
v_task VARCHAR2(30);
BEGIN
v_task := DBMS_ADVISOR.CREATE_TASK('ADDM');
DBMS_ADVISOR.SET_TASK_PARAMETER(v_task, 'START_SNAPSHOT', 100);
DBMS_ADVISOR.SET_TASK_PARAMETER(v_task, 'END_SNAPSHOT', 110);
DBMS_ADVISOR.EXECUTE_TASK(v_task);
END;
/
详细见:Oracle ADDM 详解。
8. ASH
8.1 实时
SELECT sample_time, session_id, sql_id, event
FROM v$active_session_history
WHERE sample_time > SYSDATE - 1/24
ORDER BY sample_time DESC;
8.2 报告
@?/rdbms/admin/ashrpt.sql
详细见:Oracle ASH 详解。
9. SQL 基线
9.1 SQL Plan Baseline
-- 捕获
ALTER SYSTEM SET optimizer_capture_sql_plan_baselines = TRUE;
-- 查看
SELECT sql_handle, plan_name, enabled, accepted
FROM dba_sql_plan_baselines;
详细见:Oracle SQL Plan Baseline 基线。
9.2 SQL Profile
EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
task_name => 'my_task',
name => 'my_profile'
);
详细见:Oracle SQL 调优顾问。
10. 报告
10.1 周报
- 性能趋势
- Top SQL
- 等待事件
- 容量
10.2 月报
- 性能对比
- 容量规划
- 优化建议
10.3 异常报告
- 性能下降
- 异常等待
- 资源耗尽
11. 监控
11.1 实时
- EM Express
- ASH
- Top SQL
11.2 历史
- AWR
- ADDM
- 趋势
11.3 告警
-- 告警阈值
SELECT metric_name, warning_value, critical_value
FROM dba_thresholds;
详细见:Oracle 监控告警配置。
12. 优化流程
12.1 识别
- AWR TOP SQL
- 等待事件
- 监控告警
12.2 分析
- 执行计划
- 统计信息
- 基线对比
12.3 优化
- 索引
- SQL 重写
- 参数
- 硬件
12.4 验证
- AWR 对比
- 性能提升
- 业务验证
详细见:Oracle SQL 性能调优案例。
13. 常见坑与排错
13.1 基线不准
- 充分采样
- 业务代表
- 多周期
13.2 性能波动
- 基线对比
- 异常分析
- 趋势
13.3 优化无效
- 执行计划
- SQL Profile
- Baseline
14. 最佳实践
- 关键时段快照:基线
- 多周期采样:完整
- AWR 基线:对比
- ADDM:建议
- ASH:实时
- SQL 基线:稳定
- 定期报告:监控
- 优化流程:标准
- 业务沟通:需求
- 文档化:知识
15. 参考资料
[1] Oracle Database Performance Tuning Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/tgptg/