[DB2]错误"Requesting too many semaphores" 解决办法

登录数据库时报错:"Requesting too many semaphores"


1. 首先清除db2diag.log,然后重新登录重现问题。

2. ipcs -l 检查semaphores的大小限制

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1


------ Semaphore Limits --------
max number of arrays = 4096
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 100
semaphore max value = 32767


------ Messages: Limits --------
max queues system wide = 31905
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536


3. 然后ipcs -s检查共享内存数量,这个问题的原因是因为实际数量超过了限制

结论:
每次instance重新启动前一定要*释放资源*!
包括
db2_kill
ipclean
ps -ef|grep -i db2
kill all processes left

Ps:最后发现原因是因为在备份数据库的时候,重启了服务器上的数据库,但是不知道什么原因Semaphore 变得异常增大,这时不要着急使用ipcrm终止数据库的相关共享进程,这样会导致数据丢失(我着急操作数据库,删除了部分共享内存导致一些数据丢失),应该首先试着试着重启数据库,看能不能解决问题。


转自:http://www.itpub.net/thread-531368-1-1.html

posted @ 2015-11-30 11:58  IronJJ  阅读(582)  评论(0编辑  收藏  举报