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. 最佳实践

  1. 关键时段快照:基线
  2. 多周期采样:完整
  3. AWR 基线:对比
  4. ADDM:建议
  5. ASH:实时
  6. SQL 基线:稳定
  7. 定期报告:监控
  8. 优化流程:标准
  9. 业务沟通:需求
  10. 文档化:知识

15. 参考资料

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