IBM Support

[Db2] zLinux でデータベース接続に時間がかかったり、ハングすることがある

Troubleshooting


Problem

Db2 V10.5 を Linux for z で使用しているとき、データベース接続が非常に遅かったり、接続がハングしたように見えることがあります。

Symptom

暗号化を利用したデータベースの接続が非常に遅いことがあります。

Cause

Db2 は接続の暗号化で GSkit の一部である ICC (IBM Crypt for C) を利用します。
ここで、System z 上で ICC が乱数を生成する処理が非常に遅かったり、ハングしたようになることがあります。

この問題はIT20939 として報告されており、V10.5 FP9 以降で修正されています。
IT20939 AUTHENTICATION VERY SLOW WITH HIGH CPU USAGE ON CERTAIN ZSERIES HARDWARE

Environment

zLinux で稼動する Db2 V10.5 FP8 以前

Diagnosing The Problem

Db2 のパフォーマンス・トレースを採取すると、cryptDHGetPublicKey で遅延が発生していることが確認できます。以下の例では 120 回の接続に 26 秒かかったうち、24.5 秒は ICC での遅延です。
  nCalls   TotalElapsed     TotalSpent   FunctionName
     120   27.369034493    0.000348565   sqljsDrdaAsDriver
     120   27.368685115    0.000630187   sqljsDrdaAsInnerDriver
     120   26.106644502    0.000115187   sqljsDriveRequests
     120   26.106529315    0.004548491   sqljsSqlam
     239   25.944174721    0.000929621   sqljsParse
     120   25.927604023    0.000118252   sqljsParseConnect
     120   25.927485771    0.000176062   sqljs_ddm_accsec
     358   25.927210333    0.000328000   sqljsConnectAttach
     120   25.911151147    0.000527618   sqleUCagentConnect
     120   25.900599337    0.000256875   sqleUCengnInit
     120   25.900342462    0.000409937   sqeApplication::AppLocalStart
     120   25.818030732    0.000281622   sqleExecuteSecurityCheck
     120   25.817749110    0.002334317   sqlexEngAuthenticate
     239   25.174662535    0.002626248   sqlexSlsServerEncryptAuthenticate
     120   24.576815846   24.576815846   cryptDHGetPublicKey
 

ハングに近い状態の場合、db2agnt のスタック・トレースを採取すると、以下のように cryptDHGetPublicKey の先で ICC ライブラリーが処理中の状態になっています。

<StackTrace>
-----FUNC-ADDR---- ------FUNCTION + OFFSET------
0x00000201559CA51E address: 0x00000201559CA51E ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004A51E ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559CA702 address: 0x00000201559CA702 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004A702 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559CB6A2 address: 0x00000201559CB6A2 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004B6A2 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559CB2A4 address: 0x00000201559CB2A4 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004B2A4 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559CC3BE address: 0x00000201559CC3BE ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004C3BE ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559CC4D6 address: 0x00000201559CC4D6 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000004C4D6 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559C3EDC address: 0x00000201559C3EDC ; dladdress: 0x0000020155980000 ; offset in lib: 0x0000000000043EDC ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559C0802 address: 0x00000201559C0802 ; dladdress: 0x0000020155980000 ; offset in lib: 0x0000000000040802 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559FE692 address: 0x00000201559FE692 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000007E692 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000201559FE840 address: 0x00000201559FE840 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000007E840 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x0000020155A1D5D4 address: 0x0000020155A1D5D4 ; dladdress: 0x0000020155980000 ; offset in lib: 0x000000000009D5D4 ;
(/opt/ibm/db2/V10.5/lib64/gskit_db2/C/icc/icclib/libicclib084.so)
0x00000200013CDC7C cryptDHGetPublicKey + 0x0290
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x000002000466CEFC _Z33sqlexSlsServerEncryptAuthenticateP14db2UCinterfacelPj + 0x08e8
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x0000020004660868 _Z20sqlexEngAuthenticateP14db2UCinterface + 0x19e8
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x0000020004407F18 _ZN14sqeApplication13AppLocalStartEP14db2UCinterface + 0x031c
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x00000200045F24EC _Z11sqlelostWrpP14db2UCinterface + 0x005c
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x00000200045F28D6 _Z14sqleUCengnInitP14db2UCinterfacet + 0x03c6
(/home/db2inst1/sqllib/lib64/libdb2e.so.1)
0x00000200045F52D4 sqleUCagentConnect + 0x03dc

Resolving The Problem

この問題は Db2 V10.5 FP9 以降で修正されています。

FP9 を適用した場合、以下の設定を追加してください。
注: FP8 以前で以下の設定をしても問題は解消しません。FP10 以降は以下の設定は不要です。

  1. インスタンス・オーナーでデータベース・サーバーにログインします。
  2. root で ICCSIG.txt を開きます。(下の例はsudo 経由で vi から開いています。)
    sudo vi $HOME/sqllib/lib64/gskit/N/icc/icclib/ICCSIG.txt
  3. 最下行に以下の 2 行を追記して保管します。(別の箇所に追記してはいけません。)
    ICC_LOOPS=1
    ICC_SHIFT=8
  4. 環境変数 ICC_IGNORE_FIPS=YES を設定します。
    永続化するには db2profile などにも追記します。
    export ICC_IGNORE_FIPS=YES
  5. レジストリ変数 DB2ENVLIST で環境変数 ICC_IGNORE_FIPS を読むように設定します。
    db2set DB2ENVLIST=ICC_IGNORE_FIPS
  6. 変更を反映させるため、インスタンスを再起動します。
    db2stop force
    db2start


関連情報
パスポート・アドバンテージによく寄せられる質問
GSKit Versions Shipped with DB2


お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PkdAAE","label":"Connectivity"},{"code":"a8m500000008PmnAAE","label":"Security and Plug-Ins-\u003EEncryption"}],"ARM Case Number":"","Platform":[{"code":"PF016","label":"Linux"}],"Version":"10.5.0"}]

Document Information

Modified date:
15 August 2023

UID

swg22013936