访问db2数据库 ,并发,系统进程超出限制
最近遇到一个问题,远程连接db2数据库,shell程序同时访问db2数据库的同一个表,但是返回的值是
DB21017ETheCommandLineProcessorencounteredasystemerrorwiththe
front-endprocessoutputqueue.Reasoncode=-2029060029.
系统报这个错。经过查资料得知,这是一个系统问题,系统进程超出的限制
Reasoncode=-2029060029.
SQLO_QUE_EXCEED=maximumsystemqueuelimitexceeded.
建议修改内核参数msgmni为一个合适的值
建议先修改为16384再进行测试
管理员登陆,编辑数据库端和shell程序端的参数
vi/etc/sysctl.conf
加入kernel.msgmni=16384
保存
执行sysctl-p使之生效
OK以上配置完成后,错误解决了!
------------------------------------------------------------------------------------
下面介绍一下配置信息
修改内核参数(Linux)
在安装DB2®数据库系统之前,应更新Linux®内核参数。当运行DB2数据库系统时,Linux上特殊内核参数的缺省值可能不能满足要求。
必须具有root用户权限才能修改内核参数。
要在RedHat和SUSELinux上更新内核参数:
运行ipcs-l命令
分析输出以确定是否需要对系统进行任何更改。在//后面添加了注释以指出参数名。
3.#ipcs-l4.5.------SharedMemoryLimits--------6.maxnumberofsegments=4096//SHMMNI7.maxsegsize(kbytes)=32768//SHMMAX8.maxtotalsharedmemory(kbytes)=8388608//SHMALL9.minsegsize(bytes)=110.11.------SemaphoreLimits--------12.maxnumberofarrays=1024//SEMMNI13.maxsemaphoresperarray=250//SEMMSL14.maxsemaphoressystemwide=256000//SEMMNS15.maxopspersemopcall=32//SEMOPM16.semaphoremaxvalue=3276717.18.------Messages:Limits--------19.maxqueuessystemwide=1024//MSGMNI20.maxsizeofmessage(bytes)=65536//MSGMAXdefaultmaxsizeofqueue(bytes)=65536//MSGMNB•从SharedMemoryLimits的第一部分开始,SHMMAX和SHMALL就是需要考虑的参数。SHMMAX是Linux系统上共享内存段的最大大小,而SHMALL是系统上可分配的共享内存页的最大大小。
•建议将SHMMAX值设置为与系统上物理内存量相等。然而,x86系统上需要的最小值为268435456(256MB),而在64位系统上,该值将为1073741824(1GB)。
•缺省情况下,SHMALL设置为8GB(8388608KB=8GB)。如果您具有的物理内存超过此值,并且要将该物理内存用于DB2,那么应将此参数增大到大约是计算机的物理内存的90%。例如,假定计算机系统上有16GB内存,并将这些内存主要用于DB2,那么SHMALL应该设置为3774873(16GB的90%为14.4GB;将14.4GB除以4KB(这是基页大小)得到的结果为3774873)。IPCS输出已将SHMALL转换为千字节(KB)。这是因为内核需要将此值作为页数。
•下一节说明可用于操作系统的信号量。内核参数sem由以下四个标记组成:SEMMSL、SEMMNS、SEMOPM和SEMMNI。SEMMNS是SEMMSL乘以SEMMNI的结果。数据库管理器要求根据需要增大数组的数目(SEMMNI)。通常,SEMMNI应两倍于系统上预期的最大代理程序数乘以数据库服务器计算机上的逻辑分区数再加上数据库服务器计算机上的本地应用程序连接数。
•第三部分说明了系统上的消息。
•MSGMNI将影响可以启动的代理进程数,MSGMAX将影响一个队列中可以发送的消息大小,而MSGMNB将影响队列大小。
•应将MSGMAX更改为64KB(即,65535个字节),MSGMNB应增大为65535。
要修改这些内核参数,请编辑/etc/sysctl.conf文件。如果此文件不存在,那么应创建它。下列各行是该文件中应包含的内容的示例:
22.kernel.sem=25025600032102423.#示例:用于64位系统的shmmax24.kernel.shmmax=107374182425.#示例:用于16GB内存的90%的shmall26.kernel.shmall=377487327.kernel.msgmax=65535kernel.msgmnb=65535运行sysctl时附带-p参数,以从缺省文件/etc/sysctl.conf中装入sysctl设置:
sysctl-p要使更改在每次重新引导之后生效:
•(SUSELinux)激活boot.sysctl
•(RedHat)rc.sysinit初始化脚本将自动读取/etc/sysctl.conf文件