意外断电数据库无法启动牵扯到异步IO的参数设置
一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了,
数据库起不来了……
数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5
软件环境是Linux与Oracle 10g RAC
数据库2个节点的asm都能正常启动,但数据库实例启动到mount状态后就停下没有反应了,
等很久也不能前进到open状态。
节点1上的alert日志有如下错误信息:
ORA-1013 signalled during: ALTER DATABASE OPEN
…………
ORA-1089 signalled during: alter database open
节点2上的alert日志有如下错误信息:
Thu Dec 29 15:32:46 2011
Errors in file /opt/oracle/admin/racdb/bdump/racdb2_p015_11496.trc:
ORA-27090: Message 27090 not found; product=RDBMS; facility=ORA
Linux-x86_64 Error: 4: Interrupted system call
Additional information: 3
Additional information: 128
Additional information: 65536
进一步查看/opt/oracle/admin/racdb/bdump/racdb2_p015_11496.trc,有如下信息:
ORA-27090: Message 27090 not found; product=RDBMS; facility=ORA
Linux-x86_64 Error: 4: Interrupted system call
Additional information: 3
Additional information: 128
Additional information: 65536
WARNING:io_submit failed due to kernel limitations MAXAIO for process=0 pending aio=0
WARNING:asynch I/O kernel limits is set at AIO-MAX-NR=65536 AIO-NR=65508
WARNING:Oracle process running out of OS kernel I/O resources (1)
WARNING:Oracle process running out of OS kernel I/O resources (1)
WARNING:Oracle process running out of OS kernel I/O resources (1)
WARNING:Oracle process running out of OS kernel I/O resources (1)
上面日志中提示了linux的核心参数设置有问题:AIO-MAX-NR=65536
我们知道,Linux的核心参数AIO-MAX-NR是与异步IO相关的,对于异步IO的简单解释如下:
在一个程序中如果涉及到磁盘的IO操作时,有两种情况
1. 程序等待IO操作完成,CPU再接下来处理程序的其他部分(等待IO的时间段内,CPU处于Idle Waiting状态)。
2. 程序不等待IO操作完成,允许CPU处理接下来的其他任务(或者理解为允许CPU处理接下来的不依赖于IO完成的任务)。
显然,第一种情况,CPU的资源白白的浪费了,也就是同步IO。第二种情况更有利于CPU的充分利用,这就是异步IO(asynchronous IO)。
查看操作系统的异步IO相关核心参数:
[root@db01 ~]# sysctl -a| grep aio
fs.aio-max-nr = 65536
fs.aio-nr = 0
我们知道aio-nr是所有当前活动的异步IO进程上下文的总和,其值最多不能超过aio-max-nr的设定值。并且数据库是在机房意外断电的情况下突然关闭的,关闭的一瞬间有大量的事务正在运行,所以重新启动的时候必然有大量的回滚与已提交但没有写入到数据文件的数据要开始写入,这时候的IO量是非常大的,由于启用了异步IO,此时大量的上下文切换达到了操作系统设定的最大值,于是oracle就停止响应了。查询metalink了解到oracle已证实这是一个BUG,官方建议fs.aio-max-nr的值设置为1M或以上可以解决此问题。
这里我将调整核心参数fs.aio-max-nr的值为3145728,即3M。
[root@db01 ~]# echo "fs.aio-max-nr = 3145728" >> /etc/sysctl.conf
[root@db01 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.ip_local_port_range = 1024 65000
kernel.sem = 500 64000 100 128
kernel.shmmax = 17179869184
kernel.shmall = 4194304
fs.aio-max-nr = 3145728
两台服务器的核心参数都做了上面的修改之后,数据库启动成功!
意外断电数据库无法启动牵扯到异步IO的参数设置相关推荐
- 服务器意外断电MySQL无法启动
1.背景 客户反映无法登录系统.再三询问之下,客户说出一个情况:服务器因信息中心人为原因,最近总是意外断电.更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』 what?服务器这么儿 ...
- 导入数据库显示服务器发生意外,mysql 数据库无法启动(Ignoring the redo log due to missing M...
mysql 数据库无法启动(Ignoring the redo log due to missing M mysql 数据库无法启动(Ignoring the redo log due to miss ...
- gaussdb 数据库参数说明【内存、磁盘空间、内核资源、后台写进程、异步IO】【03】
1. 内存 注意: 这些参数只能在数据库服务重新启动后生效. shared_buffers 参数说明:设置GaussDB使用的共享内存大小.增加此参数的值会使GaussDB比系统默认设置需要更多的Sy ...
- PostgreSQL 异步IO实测
标签 PostgreSQL , effective_io_concurrency , 异步IO 背景 异步IO的目的是充分发挥块设备的吞吐能力,让块设备处于更繁忙的工作状态(一次连续摄取更多的块),而 ...
- 意外断电confluence和jira的数据库挂了
公司资源紧张,开始也没考虑那么多,把jira和confluence 装在了一台虚拟机上! 意外断电,虚拟机起来后,发现数据库起不来了,好好绝望啊!!! cat /var/log/mysqld.log ...
- mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复
mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复 数据类型 mongodb 3.x 数据容量 140 GB 故障类型 服务器断电导致WiredTiger.wt文 ...
- 解决MySQL数据库意外崩溃导致数据库文件损坏或意外删除数据库文件导致无法启动问题
MySQL版本:5.7 查看mysql启动日志: 2021-09-26T09:00:39.404326Z 1 [ERROR] [MY-012179] [InnoDB] Could not find a ...
- ASP.NET Core 3.x启动时运行异步任务(一)
这是一个大的题目,需要用几篇文章来说清楚.这是第一篇. 一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...
- oracle学习笔记 参数文件及数据库的启动和关闭
oracle学习笔记 参数文件及数据库的启动和关闭 我们这节课把oracle的参数文件以及oracle的启动关闭讲一下 一)参数文件作用 先看oracle的参数文件 它由来已久了 我们知道oracle ...
最新文章
- CES新观察:智能应用全面开花 “陆海空”新品值得关注
- python基础教程第二版和第三版哪个好-最好的Python入门教材是哪本?
- 【收藏】CMD命令提示符窗口中的快捷键、小技巧和常用命令
- AddMvc 和 AddMvcCore 的区别
- 判断一个数字是否存在于某一个数据之中
- 华为nova5系列正式发布:售价2799元起
- 电脑无限重启rpc服务器不可用,StarUML启动时候出现System Error. Code:1722. RPC服务器不可用.错误的解决办法...
- php7.1 mysql_安装最新LAMP环境 (CentOS7+PHP7.1.5+Mysql5.7)
- 文件锁-crontab组合神器
- Mycat的使用 - 03.全局序列号
- 代码Review那些事
- wps如何只让他显示3级标题_wps如何设置标题级别:wps一级标题怎么设置
- 迪杰斯特拉(Dijkstra)算法
- li指令 汇编_汇编语言和汇编软件
- 计算机如何回到桌面,windows下电脑怎么回到桌面主页?
- linux i386 4G内存,Ubuntu i386 使用4G内存
- Bzoj4698: [Sdoi2008]Sandy的卡片
- 解决Failed to introspect Class KafkaMetricsAutoConfiguration
- 【机器学习】强化学习算法的优化
- Intel NUC8i5BEH安装Windows10+Hackintosh双系统