存储异常导致的Oracle重大生产故障

news/2025/2/9 5:53:50 标签: oracle, 数据库

📢📢📢📣📣📣
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

文章目录

    • 1.异常等待分析
    • 2.查找根因
      • 2.1 分析程序提交
      • 2.2 分析IO性能问题
    • 3.alert日志排查
    • 4.总结

本次的故障案例是发生在Oracle 10G的数据库上,在上午的10点,整个应用处于卡顿的状态,数据库完全是夯住了!这套库之前给客户做过巡检就提出替换存储的建议,这不这次故障存储的问题就暴露出来了,详细的分析过程如下

1.异常等待分析

通过AWR分析看出来,log file sync占比64.2%,属于提交类异常等待

那么到底log file sync是什么呢?

官方的解释为:当用户会话提交时,该会话事务生成的所有重做记录都需要从内存中刷新到重做日志文件中,以确保该事务对数据库所做的更改是永久性的。

2.查找根因

什么原因会造成了很高的log file sync等待呢?

其中的最常见的原因有2个
1.影响 LGWR 的 I/O 性能问题
2.过多的应用程序 commit

2.1 分析程序提交

比较 user commit/rollback 同 user calls 比值的平均值确认提交是否异常


user calls/(user commits+user rollbacks) 本次平均值为60.85= 60.85/(0.98+0.02) ,平均每60.85 次 user calls 就会有一次 commit,提交不是很频繁。

然后在确认LGWR switch是否异常

oracle的推荐值是每15-20分钟切换一次,也就是每小时切换3-4次。如果per Hour大于3-4次,则说明日志文件过小。

2.2 分析IO性能问题

比较’log file sync’和’log file parallel write’的平均等待时间。

很明显log file sync的时间消耗在log file parallel write上的比例高,那么大部分的等待时间是由于 IO(等待 redo 写入)

根据经验,“日志文件并行写入”的平均时间超过5-10毫秒,甚至可能更低,这表明IO子系统存在问题。

同时根据异常等待阻塞事务发现也是大量的log file parallel write阻塞了log file sync,初步判断磁盘的I/O出现了问题。

后来客户反馈,该时间段存储设备为机械盘,出了点问题,导致存储IO性能严重下降。

3.alert日志排查

alert.log日志报了如下的错误,再次证明了以上的判断无误!

数据库切换日志时,所有private strand都必须刷新到当前日志,然后才能继续,此信息表示我们在尝试切换时,还没有完全将所有 redo信息写入到日志中。

Private Strands是10gR2才有的,它用于处理redo的latch(redo allocation latch),是一种允许进程利用多个allocation latch更高效地将redo写入redo buffer cache的机制。

4.总结

不要把重做日志放在上一代或者较老的机械磁盘上,虽然通常情况下,可能会遇到写峰值,从而导致大量的严重’log file sync’等待并引发数据库性能不稳定或者hung住。

监控其他可能需要写到相同路径的进程,确保该磁盘具有足够的带宽,足以应付所要求的容量。

确保 LOG_BUFFER 不要太大,一个非常大的 log_buffer 的不利影响就是刷新需要更长的等待时间。


http://www.niftyadmin.cn/n/5845628.html

相关文章

Docker 部署 GitLab

一、下载镜像 docker pull gitlab/gitlab-ce 二、运行容器 docker run -d --name gitlab-20080 \n -p 20443:443 -p 20080:80 -p 20022:22 \n -v /wwwroot/opt/docker/gitlab-20080/etc:/etc/gitlab \n -v /wwwroot/opt/docker/gitlab-20080/log:/var/log/gitlab \n -v /www…

uniapp mqttjs 小程序开发

在UniApp中集成MQTT.js开发微信小程序时,需注意平台差异、协议兼容性及消息处理等问题。以下是关键步骤与注意事项的综合指南: 一、环境配置与依赖安装 安装MQTT.js 推荐使用兼容性较好的版本:mqtt4.1.0(H5和小程序兼容性最佳&…

Spring 6.2.2 @scope(“prototype“)原理

Spring Prototype 原理? 前置准备 创建一个MyService类 Scope("prototype") Service("myService") public class MyService {public String getMessage() {return "Hello, World!";} }创建一个main类,用于debug。 pr…

超越传统IDE:Cursor智能编码介绍

超越传统IDE:Cursor智能编码介绍 为什么选择Cursor常用快捷键常用设置汉化设置隐私设置模型选择添加大模型Rules for AI(AI生成规则)Python执行环境安装扩展切换python版本 添加Docs文档 使用技巧Chat模式与COMPOSER模式Chat 模式提交按钮COM…

攻防世界 文件上传

题目名称-文件包含 今天的题大概提一下解题思路就好了 这里要使用php://filter 在此基础上因为网页过滤了一些关键字 我们要进行爆破 UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII…

node.js + html + Sealos容器云 搭建简易多人实时聊天室demo 带源码

node.js html Sealos容器云 搭建简易多人实时聊天室demo 带源码 前言功能介绍(demo演示)sealos官网配置node.js 编写服务端代码前端ui 调用接口整体项目目录部署到服务器 前言 hello哦盆友们,这次我们来十几行代码做一个超简单的多人聊天…

zzcms接口index.php id参数存在SQL注入漏洞

zzcms接口index.php id参数存在SQL注入漏洞 漏洞描述 ZZCMS 2023中发现了一个严重漏洞。该漏洞影响了文件/index.php中的某些未知功能,操纵参数id会导致SQL注入,攻击可能是远程发起的,该漏洞已被公开披露并可被利用。攻击者可通过sql盲注等手段,获取数据库信息。 威胁等级:…

AWK系统学习指南:从文本处理到数据分析的终极武器 介绍

目录 一、AWK核心设计哲学解析 1.1 记录与字段的原子模型 1.2 模式-动作范式 二、AWK编程语言深度解析 2.1 控制结构 说明: 2.2 关联数组 代码说明: 示例输入和输出: 注意事项: 2.3 内置函数库 三、高级应用技巧 3.1…