訪問 db2 數據庫 系統併發

 

最近遇到一個問題,遠程鏈接db2數據庫,shell程序同時訪問db2數據庫的同一個表,可是返回的值是shell

DB21017E The Command Line Processor encountered a system error with the數據庫

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

系統報這個錯。通過查資料得知,這是一個系統問題,系統進程超出的限制服務器

Reason code = -2029060029.ide

SQLO_QUE_EXCEED = maximum system queue limit exceeded.測試

建議修改內核參數 msgmni 爲一個合適的值

建議先修改成 16384 再進行測試
管理員登錄,編輯數據庫端和shell程序端的參數
vi /etc/sysctl.conf
加入 kernel.msgmni = 16384
保存
執行 sysctl -p 使之生效操作系統

OK 以上配置完成後,錯誤解決了!代理

------------------------------------------------------------------------------------ code

下面介紹一下配置信息隊列

修改內核參數(Linux)

在安裝 DB2® 數據庫系統以前,應更新 Linux® 內核參數。當運行 DB2 數據庫系統時,Linux 上特殊內核參數的缺省值可能不能知足要求。

必須具備 root 用戶權限才能修改內核參數。

要在 Red Hat 和 SUSE Linux 上更新內核參數:

  1. 運行 ipcs -l 命令
  2. 分析輸出以肯定是否須要對系統進行任何更改。 在 // 後面添加了註釋以指出參數名。
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。
  1. 要修改這些內核參數,請編輯 /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 
  1. 運行 sysctl 時附帶 -p 參數,以從缺省文件 /etc/sysctl.conf 中裝入 sysctl 設置:
sysctl -p 
  1. 要使更改在每次從新引導以後生效:
    • (SUSE Linux)激活 boot.sysctl
    • (Red Hat)rc.sysinit 初始化腳本將自動讀取 /etc/sysctl.conf 文件
相關文章
相關標籤/搜索