频繁引发数据库异常宕机[转]
故障描述
在做数据批处理或imp操作的时候,频繁引发数据库异常宕机,查看alertsid.log,有如下信息:
Fri Aug 24 15:41:05 2007
Recovery of Online Redo Log: Thread 1 Group 3 Seq 248 Reading mem 0
Mem# 0: /zxdata/cc/redo03.log
Fri Aug 24 15:41:05 2007
Recovery of Online Redo Log: Thread 1 Group 1 Seq 249 Reading mem 0
Mem# 0: /zxdata/cc/redo01.log
Fri Aug 24 15:41:13 2007
Recovery of Online Redo Log: Thread 1 Group 4 Seq 250 Reading mem 0
Mem# 0: /zxdata/cc/redo04.log
Fri Aug 24 15:41:13 2007
Completed redo application
Fri Aug 24 15:41:23 2007
Errors in file /oracle/admin/cc/bdump/cc_dbw1_524450.trc:
ORA-27061: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
Fri Aug 24 15:41:23 2007
DBW1: terminating instance due to error 27061
Instance terminated by DBW1, pid = 524450
Fri Aug 24 15:44:05 2007
/oracle/admin/cc/bdump/cc_dbw1_524450.trc信息如下:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /oracle/product/10.2.0
System name: AIX
Node name: rt5604
Release: 3
Version: 5
Machine: 00C25C9F4C00
Instance name: cc
Redo thread mounted by this instance: 1
Oracle process number: 6
Unix process pid: 524450, image: oracle@rt5604 (DBW1)
*** SERVICE NAME:() 2007-08-24 15:41:06.744
*** SESSION ID:(661.1) 2007-08-24 15:41:06.744
WARNING:Oracle process running out of OS kernel I/O resources
*** 2007-08-24 15:41:23.468
error 27061 detected in background process
ORA-27061: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
从错误信息来看,是异步IO操作的时候引发的问题。初步怀疑是硬件问题,但查看系统和存储(EMC)的日志信息,没有报任何相关错误。
故障解决过程
1、为了排除EMC和网络的问题,把数据文件迁移到本地,再做大量的插入操作后(约插入了600万),发现很快就会出现同样的故障。这样,就排除了存储和网络的问题,说明故障点在于AIX和ORACLE的aio设置。此时DISK_ASYNCH_IO=true。
2、修改oracle的DISK_ASYNCH_IO=false。再做大量的插入操作,这次操作成功插入了上千万的数据,而没有出任何错误。但这样设置后,系统的性能明显下降,所以,这种设置是不可取的。
3、按oracle的官方文档,再对系统进行优化,把oracle的DISK_ASYNCH_IO= true, DBWR_IO_SLAVES=4,再做大量的插入操作,三个进程并行插入了近6千万的数据,成功通过了压力的测试。
4、最后,按照IBM工程师的建议修改了如下参数,对系统再次进行优化。
maxreqs 12280 Maximum number of REQUESTS True
maxservers 160 MAXIMUM number of servers per cpu True
minservers 40 MINIMUM number of servers True