请各位大侠帮忙看看一个Oracle 11g数据库监听的问题咨询
我维护的Oralce 11g,在9月27号以后正式投入使用。使用过程中发现一个php服务连接数据库有时会失败,频率大概2、3小时一次。
----------------环境配置信息-------------------
机器的配置是:
Dell r910:
CPU:4*10核E7-48702.40GHZ
硬盘:2*300G SAS
内存:4G*16操作系统:
Suse10 Sp04
内核:Linux coredb03 2.6.16.60-0.85.1-smp #1 SMP Thu Mar 17 11:45:06 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux数据库版本:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production----------------分析过程-------------------
在出现这类php连接数据库超时问题以后,我检查过主机的负载、CPU、IO以及内存和SWAP的使用,都比较正常(该主机逻辑CPU有80个,负载在40以内都算正常):top - 14:17:52 up 7 days, 13:22, 13 users, load average: 9.65, 11.04, 12.44
Tasks: 1602 total, 8 running, 1594 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.6%us, 1.0%sy, 0.0%ni, 90.9%id, 0.4%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 64430M total, 46802M used, 17627M free, 27M buffers
Swap: 16386M total, 2465M used, 13921M free, 30235M cached我手工在oralce主机下面执行lsnrctl status,发现命令执行花费较长的时间。正常情况下应该在1秒以内完成的,但是在问题出现时这个可能卡住,需要执行45秒才可能完成。使用strace命令去检查,发现setsockopt花费了近44秒
13455 0.000083 write(6, "\0\306\0\0\1\0\0\0\1:\1,\0\201 \0\177\377\177\10\0\0\1"..., 198) = 198 <0.000028>
13455 0.000076 read(6, "\0>\0\0\5\0\0\0\0004(DESCRIPTION=(ADDRESS="..., 8208) = 62 <44.855009>
13455 44.855154 setsockopt(6, SOL_SOCKET, SO_SNDTIMEO, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000020>
13455 0.000060 setsockopt(6, SOL_SOCKET, SO_RCVTIMEO, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000017>目前我们已经在listener的配置文件里面增加了下面的配置,但是没有解决。
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER = OFF
INBOUND_CONNECT_TIMEOUT_LISTENER=0
我维护的Oralce 11g,在9月27号以后正式投入使用。使用过程中发现一个php服务连接数据库有时会失败,频率大概2、3小时一次。
----------------环境配置信息-------------------
机器的配置是:
Dell r910:
CPU:4*10核E7-48702.40GHZ
硬盘:2*300G SAS
内存:4G*16操作系统:
Suse10 Sp04
内核:Linux coredb03 2.6.16.60-0.85.1-smp #1 SMP Thu Mar 17 11:45:06 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux数据库版本:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production----------------分析过程-------------------
在出现这类php连接数据库超时问题以后,我检查过主机的负载、CPU、IO以及内存和SWAP的使用,都比较正常(该主机逻辑CPU有80个,负载在40以内都算正常):top - 14:17:52 up 7 days, 13:22, 13 users, load average: 9.65, 11.04, 12.44
Tasks: 1602 total, 8 running, 1594 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.6%us, 1.0%sy, 0.0%ni, 90.9%id, 0.4%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 64430M total, 46802M used, 17627M free, 27M buffers
Swap: 16386M total, 2465M used, 13921M free, 30235M cached我手工在oralce主机下面执行lsnrctl status,发现命令执行花费较长的时间。正常情况下应该在1秒以内完成的,但是在问题出现时这个可能卡住,需要执行45秒才可能完成。使用strace命令去检查,发现setsockopt花费了近44秒
13455 0.000083 write(6, "\0\306\0\0\1\0\0\0\1:\1,\0\201 \0\177\377\177\10\0\0\1"..., 198) = 198 <0.000028>
13455 0.000076 read(6, "\0>\0\0\5\0\0\0\0004(DESCRIPTION=(ADDRESS="..., 8208) = 62 <44.855009>
13455 44.855154 setsockopt(6, SOL_SOCKET, SO_SNDTIMEO, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000020>
13455 0.000060 setsockopt(6, SOL_SOCKET, SO_RCVTIMEO, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000017>目前我们已经在listener的配置文件里面增加了下面的配置,但是没有解决。
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER = OFF
INBOUND_CONNECT_TIMEOUT_LISTENER=0
连接是否太频繁了?