Db2

SQL2043N 無法啟動子程序或執行緒

  • February 25, 2016

SQL2043N Unable to start a child process or thread自從升級到 rhel7 和 db2 10.5 後,我每隔一段時間就會看到該消息。db2diag.log 並沒有透露太多出於興趣,此外:

FUNCTION: DB2 UDB, oper system services, 
sqlo_waitlist::initialize, probe:10
MESSAGE : SysV semget failed with errno:
DATA #1 : Hexdump, 4 bytes

目標機器用於單元測試和開發,相關的核心參數似乎是合適的:

]$ cat /proc/meminfo 
MemTotal:       12140640 kB

]$ ipcs -l
[...]
------ Semaphore Limits --------
max number of arrays = 3072
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 32
semaphore max value = 32767

目前機器上沒有數據庫,但是——我相信——大量的信號量與 db2fenc1 相關聯:

]$ ipcs -s | grep db2fenc1 | wc -l
2800 [1]

$$ 1 $$數字 2800 不是確切的數字,但接近這個數字

]$ db2stop force

對 中的信號量數量沒有影響ipcs -s。為了釋放我必須做的信號量ipclean

我能想到的唯一可能導致 db2fenc1 獲取大量信號量的是一個受保護的 java 函式:

CREATE FUNCTION NYA.REMOVE_DIACRITICS( S VARCHAR(50))
   RETURNS varchar(50)
   FENCED THREADSAFE
   DETERMINISTIC
   NO SQL
   LANGUAGE JAVA
   PARAMETER STYLE JAVA
   RETURNS NULL ON NULL INPUT
   EXTERNAL NAME
   'StringUtil:se.vhs.nya.framework.common.util.db.DiacriticUtil!removeDiacritics'
NO EXTERNAL ACTION @

這些函式在生成的列中使用:

CREATE TABLE ...
( [...]
, <COLNAME2> VARCHAR(25) NOT NULL
   GENERATED ALWAYS AS ( NYA.REMOVE_DIACRITICS( <COLNAME1> ) )
, [...] ) @

但在測試期間沒有針對此表的大量插入/更新。

有沒有人遇到過類似的未釋放信號量的情況,在這種情況下,解決方案是什麼?

PS。不確定它是否相關,但它JAVA_HEAP_SZ是:

(JAVA_HEAP_SZ) = 2048

該問題已被 IBM 確定為缺陷,即使停止/啟動也會洩漏一個信號量。由於我們可以解決這個問題,我們不需要立即修復。一個修復將包含在未來的修復包中。

在將此報告為錯誤之前,應檢查並增加實例所有者的最大程序數 (ulimit -u)。我相信他們無論如何都會問。

引用自:https://dba.stackexchange.com/questions/128570