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

编辑手记:数据库中每一个不起眼的参数,都有其内部的原理,不可随意更改。今天分享一则因内核参数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 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

Restful风格的HTTP Basic Athorization基本认证API接口

话说什么是基本认证? 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个...

852
来自专栏xcywt

<HTTP协议详解>由浅入深看HTTP

1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务...

934
来自专栏后端技术探索

[干货实战]为最佳性能调优nginx

通常来说,一个优化良好的 Nginx Linux 服务器可以达到 500,000 – 600,000 次/秒 的请求处理性能,然而我的 Nginx 服务器可以稳...

682
来自专栏埋名

常见HTTP/FTP/WebSockets状态码大全

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1...

1023
来自专栏搜云库

Spring Boot 中使用 Kafka

Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区、多副本、冗余,因此...

3846
来自专栏Java工程师日常干货

玩转Redis集群(上)Redis集群搭建

要想搭建一个最简单的Redis集群,那么至少需要6个节点:3个Master和3个Slave。为什么需要3个Master呢?如果你了解过Hadoop/Storm/...

673
来自专栏微信公众号:Java团长

玩转Redis集群(上)

要想搭建一个最简单的Redis集群,那么至少需要6个节点:3个Master和3个Slave。为什么需要3个Master呢?如果你了解过Hadoop/Storm/...

582
来自专栏浪淘沙

Flume学习笔记

一、什么是Flume?     Apache Flume 是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/...

933
来自专栏大闲人柴毛毛

架构高性能网站秘笈(四)——反向代理缓存

什么是反向代理? 在介绍“反向代理”之前,首先要介绍一下“正向代理”的概念。 1.什么是正向代理? 在NAT技术(Network Address Transla...

3478
来自专栏SDNLAB

OpenDaylight与Mininet应用实战之OpenFlow协议分析

1、实验目的 在实验平台上熟悉SDN原理操作,通过wireshark抓包工具可以直接看到控制器与OVS交换机的通信过程、分析OpenFlow(以下简写为OF)协...

3305

扫码关注云+社区