访问db2数据库 ,并发,系统进程超出限制

最近遇到一个问题,远程连接db2数据库,shell程序同时访问db2数据库的同一个表,但是返回的值是

DB21017E The Command Line Processor encountered a system error with the

front-end process output queue. Reason code = -2029060029.



系统报这个错。经过查资料得知,这是一个系统问题,系统进程超出的限制



Reason code = -2029060029.

SQLO_QUE_EXCEED = maximum system queue limit exceeded.

建议修改内核参数 msgmni 为一个合适的值

建议先修改为 16384 再进行测试
管理员登陆,编辑数据库端和shell程序端的参数
vi /etc/sysctl.conf
加入 kernel.msgmni = 16384
保存
执行 sysctl -p 使之生效

OK 以上配置完成后,错误解决了!

------------------------------------------------------------------------------------

下面介绍一下配置信息





修改内核参数(Linux)

在安装 DB2® 数据库系统之前,应更新 Linux® 内核参数。当运行 DB2 数据库系统时,Linux 上特殊内核参数的缺省值可能不能满足要求。

必须具有 root 用户权限才能修改内核参数。

要在 Red Hat 和 SUSE Linux 上更新内核参数:
运行 ipcs -l 命令
分析输出以确定是否需要对系统进行任何更改。 在 // 后面添加了注释以指出参数名。
3.  # ipcs -l  4.     5.        ------ Shared Memory Limits --------  6.        max number of segments = 4096               // SHMMNI   7.        max seg size (kbytes) = 32768               // SHMMAX  8.        max total shared memory (kbytes) = 8388608  // SHMALL  9.        min seg size (bytes) = 1  10.   11.      ------ Semaphore Limits --------  12.      max number of arrays = 1024                 // SEMMNI  13.      max semaphores per array = 250              // SEMMSL  14.      max semaphores system wide = 256000         // SEMMNS  15.      max ops per semop call = 32                 // SEMOPM  16.      semaphore max value = 32767  17.   18.      ------ Messages: Limits --------  19.      max queues system wide = 1024               // MSGMNI  20.      max size of message (bytes) = 65536         // MSGMAX        default max size of queue (bytes) = 65536    // MSGMNB  •从 Shared Memory Limits 的第一部分开始,SHMMAX 和 SHMALL 就是需要考虑的参数。SHMMAX 是 Linux 系统上共享内存段的最大大小,而 SHMALL 是系统上可分配的共享内存页的最大大小。
•建议将 SHMMAX 值设置为与系统上物理内存量相等。然而,x86 系统上需要的最小值为 268435456(256 MB),而在 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=250 256000 32 1024  23.#示例:用于 64 位系统的 shmmax  24.kernel.shmmax=1073741824   25.#示例:用于 16GB 内存的 90% 的 shmall  26.kernel.shmall=3774873    27.kernel.msgmax=65535  kernel.msgmnb=65535  运行 sysctl 时附带 -p 参数,以从缺省文件 /etc/sysctl.conf 中装入 sysctl 设置:
sysctl -p  要使更改在每次重新引导之后生效:
•(SUSE Linux)激活 boot.sysctl
•(Red Hat)rc.sysinit 初始化脚本将自动读取 /etc/sysctl.conf 文件

猜你喜欢

转载自jackwxh.iteye.com/blog/1452975