故障分析:内核参数设置不当导致数据库异常重启

编辑手记:数据库中每一个不起眼的参数,都有其内部的原理,不可随意更改。今天分享一则因内核参数SEMOPM设置太小,加上在业务高并发时段LGWR写入太慢,系统调用失败,最终数据库异常宕机的案例。

故障现象

数据库CRASH,在CRASH前,ALERT中显示如下的日志内容

我们看到中间有27300和27301的错误。

27300:OS system dependent operation:string failed with status: string,操作系统调用失败。

原因分析

1、后台日志分析

在某天 08:59:34.664000 +08:00开始,出现大量下面日志信息:

此错误是前台进程等待LGWR返回结果,但是LGWR一直没有返回,前台进程认为LGWR出现致命的错误。

在随后出现下面的日志信息:

这里显示LGWR进程在POSTPROCESS时,调用semop进程出现状态7的错误,文字描述是Argument list too long,对应的变量是E2BIG。

错误函数变量定义,manerrno:

E2BIG Argument list too long (POSIX.1)

semop错误说明

E2BIG The argument nsops is greater than SEMOPM,the maximum number of operations allowed per system call.

说明进程在system call时,如果nsops的值大于系统配置的SEMOPM时就会报E2BIG错误。

2、主机参数配置

查看系统参数配置

这里看到SEMOPM的值为100,在ORA-27303报错时,显示值112,大于系统配置的100的,所以LGWR一次SYSTEM CALL不能POST所有前台进程,部分前台进程认为LGWR进程出现致命错误,最后导致数据库自动重启

3、分析SEMOPM为112原因

查询ASH数据

由于ASH最近1小时的数据都是存放在内存中,数据库CRASH时,并没有将内存中的数据写入数据文件中,所以这里不能从ASH中查询到任何的信息

查看操作系统LGWR,DIAG日志

主机上面无重启前的LGWR,DIAG日志信息。

最近数据库性能趋势

该数据库从故障前十天左右号某业务上线后,数据库每秒的REDO达到20~40M,物理IO也读达到200M/S以上,写达到100M/S,网络流量达到60M/S,IO延迟与网络延迟都很严重,所以怀疑是在高并发情况下,导致数据库日志写入慢,大量前台进程(报错时112)等待LGWR的POST信息,超过内核参数配置的100值。

处理建议

修改主机kernel.sem的值,建议修改成跟模板数据库一致,修改此参数需要重启数据库。

后续工作

1、 优化该数据库的SQL,减少物理读,出账结束后就开始收集优化信息。

2、 增加主机CPU资源,修改网络绑定的方式,减少网卡软中断的次数与包重传的次数。

3、考虑重启主机。

4、 继续跟开发一起分析业务,查询为什么业务执行次数与AWR中SQL统计的次数差异很大,找到日志量变换的原因。

5、 更换更好的存储,提高IO性能。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏www.96php.cn

Win2003中配置FTP服务,开启防火墙导致客户端无法连接【精华详解】

因为某种需求,我们在Win2003中配置FTP,可能使用的是IIS可能使用的是其他的服务软件,可能是出于安全的考虑我们必须开启防火墙,可开启防火墙导致客户端无...

38511
来自专栏Python爬虫与数据挖掘

手把手教你在VMware虚拟机中安装Ubuntu14.04系统

在VMware中创建完虚拟机之后,一般需要给虚拟机安装系统,比较受青睐的系统有Ubuntu和Centos,关于Centos系统的安装之前已经写过了,感兴...

452
来自专栏Java后端技术

Python学习的路上,Anaconda送你一双遮天神翼

​  最近在学习python,发现在本地搭建python环境的时候,要是想要同时搭建不同python版本的环境,就比较麻烦,很容易就出现冲突了,很是头疼。然后光...

742
来自专栏魏艾斯博客www.vpsss.net

BT-Panel Linux 自动磁盘挂载工具 自动将分区挂载到/www 目录

4733
来自专栏何俊林

Ubuntu18.04 从头开始编译 Android Native WebRTC

本文详细记录Mac下使用PD虚拟机安装ubuntu18.4桌面版,编译Android Native WebRTC的过程。

832
来自专栏猛牛哥的博客

centos安装aria2

9123
来自专栏编程坑太多

『高级篇』docker之kubernetes基础集群部署(下)(34)

kube-scheduler负责分配调度Pod到集群内的节点上,它监听kube-apiserver,查询还未分配Node的Pod,然后根据调度策略为这些Pod分...

974
来自专栏即时通讯技术

新手入门:史上最全Web端即时通讯技术原理详解前言 学习交流 更多资料一、传统Web的通信原理二、传统通信方式实现IM应用需要解决的问题三、全双工低延迟的解决办法 五、WebSocket结束语

浏览器本身作为一个瘦客户端,不具备直接通过系统调用来达到和处于异地的另外一个客户端浏览器通信的功能。这和我们桌面应用的工作方式是不同的,通常桌面应用通过sock...

703
来自专栏菩提树下的杨过

spring cloud: 使用consul来替换eureka

eureka官方已经正式宣布:自2.0起不再维护该项目,并在github 项目wiki上放出了一段吓唬人的话:

2236
来自专栏蓝天

cron 的配置和说明

作者:北南南北 来自:LinuxSir.Org 摘要:Linux操作系统中,计划任务通常由cron来承担,了解或掌握cron,能为我们管理服务器带来更多的便利,...

782

扫码关注云+社区