本文适用于以下 Oracle 数据库版本:
Oracle 提供了从性能数据采集、问题诊断、SQL 调优、变更验证到操作系统监控的一整套工具。实际工作中,不应依赖某一个报告判断问题,而应建立完整的分析链路:
发现异常 → 确定瓶颈时间段 → 定位等待事件和高负载 SQL → 分析执行计划 → 实施优化 → 验证效果
需要注意,不同功能的适用版本、数据库版本类型、部署平台和授权要求并不完全相同。AWR、ASH、ADDM、SQL Monitor 等功能即使已经安装在数据库中,使用时也可能需要 Oracle Diagnostics Pack、Oracle Tuning Pack 或 Oracle Real Application Testing 许可。
AWR,即自动工作负载信息库,是 Oracle 数据库历史性能数据采集和分析的基础。
AWR 按照一定时间间隔创建快照,记录两个快照之间的性能变化,主要包括:
AWR 适合分析以下问题:
生成单实例 AWR 报告:
@?/rdbms/admin/awrrpt.sql
RAC 环境中可以生成全局 AWR 报告:
@?/rdbms/admin/awrgrpt.sql
AWR 不是简单记录某一时刻的累计值,而是利用快照之间的差值分析负载。Oracle 官方将 AWR 定位为性能问题检测和数据库自我调优所需的性能统计信息存储基础。
ADDM,即自动数据库诊断监视器,以 AWR 采集的数据为基础,对数据库性能进行自动分析。
它主要从 DB Time 的角度判断哪些问题对数据库整体性能影响最大,并给出相应建议,例如:
ADDM 不仅描述发生了什么,还会尝试说明问题影响、可能原因、预计收益和处理建议。
生成 ADDM 报告:
@?/rdbms/admin/addmrpt.sql
ADDM 适合数据库级别的宏观诊断,但不能完全替代人工分析。对于持续时间很短、发生在两个 AWR 快照之间的性能抖动,通常还需要结合 ASH 分析。
ASH,即活动会话历史,用于记录数据库中活动会话的采样信息。
Oracle Database 10g Release 1 开始提供 ASH,并将部分 ASH 采样通过 AWR 快照持久化到
DBA_HIST_ACTIVE_SESS_HISTORY。Oracle 10g Release 2 官方文档已经明确提供独立的
ashrpt.sql 和
ashrpti.sql 报告脚本。
需要区分以下概念:
V$ACTIVE_SESSION_HISTORY:保存内存中的近期 ASH 采样;DBA_HIST_ACTIVE_SESS_HISTORY:保存由 AWR 持久化的部分历史 ASH 采样;ASH 可以帮助回答以下问题:
生成 ASH 报告:
@?/rdbms/admin/ashrpt.sql
查询最近 10 分钟的主要活动:
SELECT event, session_state, COUNT(*) AS samplesFROM v$active_session_historyWHERE sample_time > SYSTIMESTAMP - INTERVAL '10' MINUTEGROUP BY event, session_stateORDER BY samples DESC;
ASH 特别适合分析持续时间较短、未能在 ADDM 中充分体现的瞬时性能问题。
Oracle 可以根据预设阈值或动态基线,对数据库运行状态进行监控并生成告警。
典型监控指标包括:
服务器告警适合主动发现异常,但它只能说明指标超过阈值,不能代替根因分析。收到告警后,仍需结合 AWR、ASH、动态性能视图和操作系统数据进行判断。
Oracle Enterprise Manager Cloud Control,简称 OEM,是 Oracle 提供的集中式数据库管理和监控平台。
OEM 的主要功能包括:
OEM 更像一个集中展示和管理平台,其底层数据通常来自 AWR、ASH、ADDM 和动态性能视图。
SQL Tuning Advisor 用于分析一条或多条高负载 SQL,并给出优化建议。
建议内容可能包括:
其输入可以来自 AWR、Shared Pool、SQL Tuning Set,以及 ADDM 发现的高负载 SQL。
SQL Tuning Advisor 主要利用优化器的深度分析能力识别统计信息、访问路径、执行计划或 SQL 结构方面的问题,并不等同于自动重写所有 SQL。
SQL Access Advisor 从一组 SQL 工作负载出发,分析是否应该调整数据访问结构,可能建议:
二者的侧重点不同:
Real-Time SQL Monitoring 用于实时观察 SQL 的执行过程,特别适合分析长时间运行 SQL 和并行 SQL。
SQL Monitor 可以显示:
生成文本格式 SQL Monitor 报告:
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR( sql_id => 'SQL_ID', type => 'TEXT', report_level => 'ALL' )FROM dual;
SQL Monitor 展示的是 SQL 执行期间的实际运行信息,而不仅仅是优化器的预估成本。
Automatic SQL Tuning 通常在自动维护窗口中运行,其基本过程如下:
自动 SQL 调优适合持续发现日常工作负载中的高消耗 SQL,但生产环境仍应审慎评估自动实施的建议。
SQL Performance Analyzer,简称 SPA,主要用于评估系统变更对 SQL 性能的影响。
适合使用 SPA 验证的变更包括:
SPA 可以比较变更前后同一批 SQL 的性能,并将 SQL 划分为性能改善、基本不变、性能退化或执行失败等类型。
SPA 不能完全代表真实业务并发压力。如果需要验证完整并发工作负载,应考虑 Database Replay。
SQL Plan Management,简称 SPM,通过 SQL Plan Baseline 控制 SQL 可以采用的执行计划,主要用于防止执行计划变化导致性能回退。
常见使用场景包括:
SPM 并不是禁止执行计划变化,而是允许数据库验证新计划。表现更好的计划可以在验证后加入 SQL Plan Baseline。
Automatic Indexing 根据应用工作负载自动识别索引候选项,并进行创建、验证和管理。
典型过程如下:
自动索引在 Oracle Database 19c 中引入,但不代表所有 19c 及以上数据库都可以使用。它的可用性受到数据库版本类型、部署平台和许可政策限制。
SQL Quarantine (19c引入该特性)用于隔离严重消耗资源的 SQL 执行计划,防止相同计划反复执行并持续消耗系统资源。
需要注意,被隔离的是特定 SQL 执行计划,而不一定是整条 SQL。SQL 生成其他执行计划后仍可能继续执行。
典型应用场景包括:
传统优化器统计信息通常通过
DBMS_STATS 定期收集。如果业务在短时间内写入大量数据,统计信息可能来不及更新,从而导致错误的基数估算和执行计划。
Real-Time Statistics 可以在常规 DML 过程中动态维护部分关键统计信息,降低统计信息过期带来的执行计划风险。
需要注意:
DBMS_STATSV$ 动态性能视图是 DBA 观察数据库实时运行状态最直接的接口。
| 视图 | 主要用途 |
|---|---|
V$SESSION |
查看当前会话、等待事件和阻塞关系 |
V$SQL |
查看 SQL 累计执行统计 |
V$SQLSTATS |
查看 SQL 统计信息 |
V$SQL_PLAN |
查看 SQL 执行计划 |
V$SQL_PLAN_STATISTICS_ALL |
查看执行计划步骤的实际统计 |
V$SYSTEM_EVENT |
查看系统级等待事件 |
V$SESSION_EVENT |
查看会话级等待事件 |
V$ACTIVE_SESSION_HISTORY |
查看活动会话采样 |
V$SYSSTAT |
查看系统累计统计 |
V$SEGMENT_STATISTICS |
查看对象和段级统计 |
V$LOCK |
查看锁资源 |
V$TEMPSEG_USAGE |
查看临时空间使用情况 |
V$PGA_TARGET_ADVICE |
查看 PGA 配置建议 |
V$SGA_TARGET_ADVICE |
查看 SGA 配置建议 |
查询当前正在等待的非空闲会话:
SELECT sid, serial#, username, sql_id, event, wait_class, seconds_in_wait, blocking_sessionFROM v$sessionWHERE status = 'ACTIVE'AND username IS NOT NULLORDER BY seconds_in_wait DESC;
动态性能视图反映的多数是当前状态或实例启动以来的累计信息。分析历史故障时,应结合 AWR 和 ASH,而不能只查看当前 V$ 视图。
执行计划是 SQL 调优的核心依据之一。对于已经执行过的 SQL,应尽量查看实际执行计划,而不是只使用
EXPLAIN PLAN:
SELECT *FROM TABLE( DBMS_XPLAN.DISPLAY_CURSOR( sql_id => 'SQL_ID', cursor_child_no => NULL, format => 'ALLSTATS LAST +PEEKED_BINDS' ) );
重点关注:
E-Rows:优化器估算行数A-Rows:实际返回行数Buffers:逻辑读Reads:物理读A-Time:实际运行时间如果
E-Rows 与
A-Rows 相差很大,通常需要检查统计信息、数据倾斜、直方图、关联列、表达式谓词和绑定变量。
EXPLAIN PLAN 展示的是解释时预计采用的计划,可能与 SQL 真正执行时使用的计划不同。
数据库日志和 Trace 是分析内部错误、异常等待和复杂 SQL 性能问题的重要证据,主要包括:
SQL Trace 可以记录 SQL 解析、执行、获取、CPU、等待事件和绑定变量等信息,再通过 TKPROF 转换为易读报告。
生产环境中应谨慎启用高级 Trace。Trace 可能产生较大文件并增加运行开销,因此应限定目标会话、SQL、模块和采集时间。
OSWatcher 通常简称 OSW 或 OSWbb,用于持续采集操作系统性能信息,包括:
OSWatcher 适合判断数据库异常是否与操作系统资源问题相关。在较新的 Oracle 诊断体系中,它可以作为 Autonomous Health Framework 支持工具的一部分使用。
SQLHC,即 SQL Health Check,是 Oracle Support 常用的 SQL 诊断脚本工具。
它可以围绕指定 SQL ID 收集以下信息:
SQLHC 不是数据库内置的自动优化组件,通常需要从 My Oracle Support 获取并按照对应文档执行。
Oracle Autonomous Health Framework,简称 AHF,集成或关联了多种诊断能力,包括:
AHF 适合快速收集指定故障时间段内数据库、集群和操作系统的关联信息。
| 功能 | 11g | 12c | 19c | 26ai |
|---|---|---|---|---|
| AWR、ASH、ADDM | 支持 | 支持 | 支持 | 支持 |
| SQL Tuning Advisor | 支持 | 支持 | 支持 | 支持 |
| SQL Access Advisor | 支持 | 支持 | 支持 | 支持 |
| SQL Monitor | 支持 | 支持 | 支持 | 支持 |
| Automatic SQL Tuning | 支持 | 支持 | 支持 | 支持 |
| SQL Performance Analyzer | 支持 | 支持 | 支持 | 支持 |
| SQL Plan Management | 支持 | 增强 | 增强 | 进一步增强 |
| 在线统计信息收集 | 部分场景 | 支持直接路径操作 | 支持 | 支持 |
| Real-Time Statistics | 不支持 | 不支持 | 引入 | 支持 |
| Automatic Indexing | 不支持 | 不支持 | 引入 | 增强 |
| SQL Quarantine | 不支持 | 不支持 | 引入 | 增强 |
表中的“支持”只代表相应数据库版本具备该技术能力,不代表所有版本类型、平台和许可证都可以无条件使用。
首先确认:
时间范围不准确,是很多性能分析失败的重要原因。
使用 OEM、AWR、ADDM、ASH 和动态性能视图判断主要瓶颈属于:
重点检查:
结合以下工具确认 SQL 问题:
DBMS_XPLAN.DISPLAY_CURSOR不要只根据 Cost 数值判断执行计划优劣。Cost 是优化器用于比较候选计划的估算值,并不等同于真实执行时间。
通过 OSWatcher、
top、
vmstat、
iostat、
sar 或监控平台判断:
优化措施可能包括:
优化后必须使用相同时间范围、相同 SQL 负载和相同指标进行复测。必要时可使用 SPA 或 Database Replay 验证变更效果。
Oracle 性能工具的授权是生产环境中必须重视的问题:
数据库中存在某个包、视图或菜单,不代表当前许可证自动允许使用。正式使用前,应根据实际数据库版本、部署方式、最新许可文档和采购合同进行确认。
Oracle 性能优化工具可以分为三个层次:
在实际性能优化中,建议遵循以下原则:
EXPLAIN PLAN;性能优化的目标不是让所有指标都变小,而是在业务可接受的成本范围内,稳定地缩短关键事务响应时间、提高系统吞吐量,并减少性能回退风险。
-the end-
MyBologs:
https://www.myhfxf.com
https://www.xiaofeihuangfu.com
CSDN: https://blog.csdn.net/xfhuangfu
ITPUB: https://blog.itpub.net/28373936/
微信公众号:xfhuangfu
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28373936/viewspace-3183706/ ,如需转载,请注明出处,否则将追究法律责任。