Oracle AWR案例分析:备库太慢,拖垮了主库性能

全网最全面的Oracle AWR 专栏,持续更新中...

最近有一家医院的客户抱怨 Oracle 数据库运行缓慢,并将 AWR 报告发给我分析。这篇文章记录了我分析和排查问题的过程。

从负载概要(Load Profile)来看,这是一个典型的 OLTP 类型系统,负载不轻,但整体并无异常。

在 AWR 报告中,"Top Events" 一节往往能揭示性能症状,这次也不例外。

第二大等待事件是 "log file sync",平均等待时间高达 78 毫秒,已经严重偏慢。

而 "db file scattered read" 和 "db file sequential read" 的平均等待时间为 0 毫秒,说明存储性能非常好。因此,"log file sync" 的缓慢并不是由存储问题引起的,除非log file和data file位于不同的磁盘。

接着我查看了后台等待事件中的 "log file parallel write",这个事件表示 LGWR 进程实际将重做日志写入磁盘的等待。

从 "log file parallel write" 平均仅 1 毫秒的等待时间来看,磁盘 I/O 性能非常出色,这与前面的读等待一致。说明问题不是存储瓶颈。但后台等待事件列表给出了更多线索:

"LNS wait on SENDREQ" 是后台等待中最多的,这表示主库的 LNS(Log Network Server)进程在等待从库返回收到redo日志的确认。

其次,"LGWR-LNS wait on channel" 等待事件说明 LGWR(Log Writer)进程正在等待 LNS 完成工作。

从这两个高等待事件可以看出,性能瓶颈在于主库向备用库传输重做数据的过程中。主库在等待备用库写入完成。

继续向下查看 "init.ora parameters" 部分,我发现了如下参数设置:

SQL 复制代码
log_archive_dest_2 = SERVICE=datgorcl LGWR SYNC AFFIRM valid_for=(online_logfiles, primary_role) db_unique_name=datgorcl

(其中参数值中的数据库名已做脱敏处理以保护客户隐私。)

这里的 SYNC 表示主库在提交前必须等待备用库确认接收到重做数据;AFFIRM 表示备用库必须将重做日志写入磁盘后才能确认。这种组合确保了最高的数据安全性(无数据丢失),但每次提交都需要等待网络传输和磁盘 I/O,从而导致 "log file sync" 变慢。

由于在 Top Events 中有明显的 GC(Global Cache)相关等待,我接着查看了 "RAC Statistics" 部分。

数据显示,无论是 CR 块还是 Current 块的 flush time 都非常慢,原因显然与 "log file sync" 的缓慢一致。而缓慢的 flush time 又进一步导致了更多 GC 相关等待事件的出现。

与客户进一步沟通得知,这是一个实验室信息管理系统(LIS),为了保障数据安全,他们在一台虚拟机上搭建了备用库。虚拟机性能较弱,导致备用库响应慢,从而拖慢了主库。

我建议客户将log_archive_dest_2参数中的 SYNC 改为 ASYNC,将 AFFIRM 改为 NOAFFIRM,以异步方式传输重做日志。客户最终选择直接关闭备库,问题也随之解决。

号主在certview.oracle.com网站上的证书清单截图。

关于号主,姚远:

  • Oracle ACE(Oracle和MySQL数据库方向)
  • 华为云最有价值专家
  • 《MySQL 8.0运维与优化》的作者
  • 拥有数十项数据库认证
  • 曾任IBM公司数据库部门经理
  • 20+年DBA经验,服务2万+客户
  • 精通C和Java,发明两项计算机专利
  • 两次获得国家部级奖
相关推荐
TDengine (老段)13 分钟前
开放生态破局工业大数据困局:TDengine 的迭代升级与全链路数据自由流动
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
一位代码15 分钟前
一些常用的通用 mysql 命令详解及注意事项
数据库·mysql
苏supper26 分钟前
DBExportDoc V1.0 For Oracle.doc导出oracle数据库表结构说明文档出错Fatal NI connect error 6413
oracle
曹牧27 分钟前
Oracle:五笔码
数据库·oracle
今晚务必早点睡28 分钟前
MySQL 新手避坑指南:安装、区分、检查一步到位
数据库·mysql·adb
JIngJaneIL31 分钟前
基于java+ vue畅游游戏销售管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·游戏
詹姆斯爱研究Java32 分钟前
基于Django的租房网站的设计与实现
数据库·python·django
deng-c-f32 分钟前
Linux C/C++ 学习日记(50):连接池
数据库·学习·连接池
运维行者_39 分钟前
APM 性能监控是什么?从应用监控与网站监控了解基础概念
网络·数据库·云原生·容器·kubernetes·智能路由器·运维开发
全栈小540 分钟前
【数据库】当InfluxDB遇到天花板:金仓数据库如何重构时序性能极限?
数据库·重构