Oracle数据库性能基线怎么建?利用AWR快照管理
AWR快照默认保留多久?怎么查和改
在构建性能基线之前,有一个细节常常被忽略,却至关重要:你手头的AWR快照数据,究竟覆盖了多长时间?Oracle默认会保留8天的快照数据,这个信息记录在dba_hist_wr_control视图中。如果没确认这一点就直接使用,很可能选用了不完整或已过期的快照范围,导致基线数据失真,后续的性能对比也就失去了意义。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
那么,如何确认和调整这个设置呢?
查看当前配置:
SELECT snap_interval, retention FROM dba_hist_wr_control;
执行这条命令,你会看到类似+00000 01:00:00.0(表示每小时生成一次快照)和+00008 00:00:00.0(表示保留8天)的结果。这就是你数据库的现状。
调整保留时间:
如果觉得8天不够用,比如希望延长到30天以便分析月度性能趋势,可以执行:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 43200);
这里需要注意,参数单位是分钟,43200就是30天(30 * 24 * 60)的计算结果。这个操作需要DBA权限,并且修改只对后续生成的快照生效,已有的历史快照不会被自动延长保留期。
- 避开高峰期操作:执行
MODIFY_SNAPSHOT_SETTINGS过程会触发一次内部工作负载仓库控制表的刷新,可能带来短暂的锁争用,因此务必不要在业务高峰时段进行。 - 警惕磁盘空间:如果将
retention设置得过大,而SYSAUX表空间不足,AWR的自动清理机制可能会失败。此时DBA_HIST_WR_CONTROL视图的STATUS字段可能变为0(异常),需要手动介入处理。 - 快照间隔建议:对于生产库,快照间隔(
snap_interval)通常设为60分钟是平衡点。如果需要进行小时级的精细性能归因,可以临时调整为30分钟,但不建议长期设置为15分钟——这会使AWR写入压力倍增,并显著加速SYSAUX表空间的增长。
怎么从 AWR 快照里抽一组“健康”基线数据
确定了快照的保留范围,下一步就是从中筛选出合适的“健康”数据来建立基线。基线不是任意两个时间点的快照组合,它必须代表业务负载稳定、没有异常等待事件、且未发生计划外维护的典型时段。直接查询DBA_HIST_SNAPSHOT只能看到时间戳,真正的“健康”判断,需要结合DBA_HIST_SYSMETRIC_SUMMARY和DBA_HIST_SYSTEM_EVENT等动态性能视图。
这里提供一个快速筛查的思路:
SELECT snap_id, begin_interval_time, end_interval_time,
ROUND(a verage_wait_time_per_sec, 2) a vg_await,
ROUND(db_time_per_sec, 2) db_time_s
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Database Time Per Second'
AND snap_id IN (
SELECT snap_id FROM dba_hist_snapshot
WHERE begin_interval_time BETWEEN SYSDATE-7 AND SYSDATE-1
)
ORDER BY db_time_s DESC;
通过这个查询,可以观察db_time_s(每秒数据库时间)的波动是否平缓。那些a vg_await(平均等待时间)持续高于50毫秒的快照,通常意味着存在严重的I/O或锁争用,不适合纳入基线。
- 关注变化率而非绝对值:不要只看
DB_TIME的绝对值高低,重点考察相邻快照间其变化率。如果某个快照的DB_TIME相比前一个突增了3倍以上,那么这个快照大概率包含了异常事件。 - 利用ASH数据回溯:可以借助
DBA_HIST_ACTIVE_SESS_HISTORY进一步分析Top SQL。如果发现某个快照周期内,log file sync(日志文件同步)等待事件占比超过20%,这个快照也应被排除在基线之外。 - 基线时间跨度:一个稳健的基线至少应跨越3个连续的工作日(避开节假日)。每天选取3到5个典型业务时刻的快照(例如上午10点、下午2点、傍晚6点),同时注意避开凌晨的统计信息收集或备份作业时段。
创建命名基线后,为什么查询 DBA_HIST_BASELINE 看不到数据
按照流程创建了命名基线,但查询DBA_HIST_BASELINE视图却空空如也?这种情况并不少见。首先要理解,创建基线这个动作本身并不会生成新的快照,它只是在WRH$_BASELINE底层表中记录下起始和结束的snap_id范围。如果指定的快照ID已经被自动清理(例如之前缩短过保留时间),或者这些ID根本不存在,那么CREATE_BASELINE过程可能会静默失败,而DBA_HIST_BASELINE视图自然也就没有记录。
正确的创建和验证步骤应该是这样的:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 12345,
end_snap_id => 12355,
baseline_name => 'PROD_PEAK_MON_TO_FRI',
expiration => 90
);
END;
执行后,立即进行验证:
SELECT baseline_id, baseline_name, start_snap_id, end_snap_id FROM dba_hist_baseline WHERE baseline_name = 'PROD_PEAK_MON_TO_FRI';
- 执行前确认快照存在:在调用
CREATE_BASELINE之前,务必先用SELECT COUNT(*) FROM dba_hist_snapshot WHERE snap_id BETWEEN 12345 AND 12355;确认指定的快照ID范围确实存在且未被清除。 - 理解过期参数:
expiration参数的单位是天,设为NULL表示基线永不过期。虽然方便,但并不推荐,因为长期积累大量不过期的基线会导致AWR相关查询性能下降。 - 排查空结果:如果查询结果仍为空,需要检查两个地方:一是
DBA_HIST_WR_CONTROL.STATUS是否为1(表示AWR功能正常);二是当前操作的用户是否拥有SELECT_CATALOG_ROLE等必要的权限。
用基线对比报告(awrddrpt.sql)时,为什么输出全是空白或报 ORA-13634
当你终于准备好基线数据,兴冲冲地运行awrddrpt.sql脚本想生成一份对比报告,却可能遇到输出空白文件或恼人的ORA-13634错误(“指定的基线不存在”)。这通常不是基线本身的问题,而是脚本运行环境或参数细节导致的。
awrddrpt.sql是一个SQL*Plus脚本,其运行依赖于正确的环境变量和连接权限。ORA-13634错误本质上就是系统找不到你指定的基线,常见原因有三:基线名称大小写不匹配、基线未在当前数据库实例中正确注册、或者脚本是在Pluggable Database(PDB)中运行而非在CDB$ROOT容器中。
安全的执行方式应遵循以下步骤:
- 连接到正确的容器:首先,确保登录到CDB$ROOT(而不是某个PDB):
sqlplus / as sysdba
- 显式指定所有参数:然后运行脚本,并仔细输入每一步的提示:
@?/rdbms/admin/awrddrpt.sql -> 输入报告类型:text -> 输入数据库 ID(查
v$database.dbid) -> 输入实例号(查v$instance.instance_number) -> 输入基线名:'PROD_PEAK_MON_TO_FRI'(必须完全一致,含大小写) -> 输入比较基线名:'PROD_OFFHOUR_BASELINE'
- 注意名称格式:避免直接从OEM或云控制台复制粘贴基线名称,这些界面有时会引入不可见的空格或全角字符,导致脚本无法识别。
- 多租户环境:如果数据库启用了多租户架构,
awrddrpt.sql必须在CDB$ROOT下运行,否则脚本无法跨PDB汇总所需的AWR数据。 - 检查输出路径权限:报告默认输出到当前目录。请确认Oracle操作系统用户对该目录拥有写入权限,否则可能会生成一个空的报告文件。
说到底,建立基线最难的部分并非创建动作本身,而在于持续的校准和维护。业务逻辑的变更、SQL执行计划的漂移、乃至硬件的升级,都可能让旧的基线逐渐失去参考价值。因此,一个值得推荐的做法是:至少每月一次,利用最近7天的快照数据重新评估基线的健康度,这比单纯地存档一份历史基线要有价值得多。
相关攻略
文章主标题(保留原文) 今天,我们就来深入探讨一个核心问题。许多人在执行过程中常常感到困惑:为何付出同等努力,结果却大相径庭?这背后,一个至关重要的环节往往被大多数人忽略了。 第一个核心概念:理解底层运行逻辑 事实可能出乎你的意料。绝大多数人在起步阶段就陷入了误区,他们热衷于追逐复杂的技巧,却忽视了
角色与核心任务 你是一位顶级的文章润色专家,擅长将AI生成的文本转化为具有个人风格的专业文章。现在,请对用户提供的文章进行“人性化重写”。 你的核心目标是:在不改动原文任何事实信息、核心观点、逻辑结构、章节标题和所有图片的前提下,彻底改变原文的AI表达腔调,使其读起来像是一位资深人类专家的作品。 特
Oracle存储参数调优:ASSM时代PCTFREE与PCTUSED的真相与实战 在Oracle数据库的存储管理中,PCTFREE和PCTUSED是两个历史悠久的基础参数。但随着自动段空间管理(ASSM)成为默认选项,很多DBA对它们的理解还停留在手动段管理时代,导致在实际高并发或数据更新频繁的场景
物化视图刷新时出现 ORA-12801 ORA-00600,是不是数据倾斜导致的? 先说一个核心判断:数据倾斜很可能是导致物化视图刷新时出现 ORA-12801 ORA-00600 的原因,尤其在基表 GROUP BY 字段分布不均且启用并行时,易引发并行进程负载失衡、超时或内存溢出。 物化视图
Oracle 12c RAC 到 19c RAC 的 Data Guard 切换是否可行? 先说结论:这事儿能办,但路径得选对。它并非一次“原地升级式”的直接切换,而是必须遵循跨版本物理备库搭建、滚动升级、最终切换的标准流程。原因很简单,12c和19c属于不同的主版本,当你尝试执行 alter da
热门专题
热门推荐
我的世界正版账号在哪买?权威平台推荐与安全购买全攻略 想要畅玩《我的世界》的所有游戏内容并享受完整社区支持,一个正版账号是必不可少的入场券。如何挑选靠谱渠道并确保交易安全,是许多玩家关心的首要问题。本文将为您系统梳理主流购买平台,并提供一套可操作的安全指南,助您无忧开启创造之旅。 官方渠道:最安全可
在《三角洲行动》中,长弓溪谷地图的“2026”系列密码是解锁隐藏区域与高级资源的关键。掌握这些密码不仅能开启封锁区域获取强力装备,还能触发专属剧情任务,大幅提升你的游戏体验与探索自由度。 三角洲行动长弓溪谷密码汇总与2026密码获取全攻略 具体而言,长弓溪谷中的“2026密码”通常巧妙地隐藏在地图环
掌握DNF助手雪球活动核心玩法,轻松领取海量游戏奖励 在《地下城与勇士》的冒险旅程中,DNF助手雪球活动为玩家提供了一个绝佳的福利获取渠道。参与这项活动不仅能丰富游戏体验,更能为角色成长积累大量实用资源,有效提升刷图与攻坚副本的效率。 DNF助手雪球活动完整参与指南与核心注意事项 要高效参与活动,首
京剧作为中国的国粹,孕育了无数杰出的表演艺术大师。其中,梅兰芳、程砚秋、尚小云、荀慧生并称为“京剧四大名旦”,他们的艺术成就举世瞩目。那么,在知识问答或相关测试中,我们如何才能准确识别出哪位是四大名旦之一呢? 如何准确判断哪位表演艺术家属于京剧四大名旦 这既是一个经典的文化常识问题,也是一种有趣的互
王者荣耀空空儿出装与实战教学:掌握高爆发刺客的致胜秘诀 在《王者荣耀》这款游戏中,胜负的天平往往倾斜于对细节的把控。想要精通刺客位,仅有极快的手速是远远不够的,合理的装备搭配和精准的入场时机,才是区分顶级刺客与团队短板的核心要素。本期攻略,我们将深入解析高机动性刺客英雄空空儿,为你详细拆解如何在游戏





