IBM Support

[Db2] 特定のシステムでデータベース接続に時間がかかることがある

Troubleshooting


Problem

特定のシステムでユーザー名とパスワードを指定してデータベース接続を行うと、数秒~数分時間がかかることがあります。 コマンド行プロセッサー (CLP) から接続を試行している場合、DB21015E でバックエンド・プロセス (db2bp) の生成がタイムアウトすることもあります。 この現象はアプリケーションを起動して最初の接続で発生します。また、接続に時間がかかっているとき、該当アプリケーションによる CPU 使用率が高くなります。

Cause

Db2 クライアントはパスワードや送信データの暗号化に、IBM Global Security Kit (GSKit) の一部である IBM Crypto for C (ICC) ライブラリーを使用します。

  • 標準規格への準拠
    DB2 LUW は FIPS 140-2 認定の暗号ライブラリーを使用して暗号化を行います。 使用されるライブラリーは、IBMJCEFIPS (certificate 376) および IBMJSSEFIPS (certificate 409) および IBM Crypto for C (ICC (certificate 384) です。

このため、Db2 クライアントで暗号化が必要な最初の操作が行われた時点で、ICC ライブラリーの初期化が行われます。

ICC ライブラリーの初期化中に、乱数発生モジュール (TRNG) によって暗号化で利用するための乱数が生成されます。しかし、POWER 5+ 以降の CPU を搭載したシステムや、LPAR/VMWare などの仮想化環境では、良質な乱数の生成に時間がかかることがあります。また、乱数生成は CPU に依存した処理のため、ICC の初期化中は該当プロセスの CPU 使用率が高くなります。

この問題は以下の APAR として報告されており、V9.7 FP7 以降に修正が含まれています。

IC77542 (V9.7) / IZ29155 (V9.5) / IZ12129 (V9.1) AUTHENTICATION VERY SLOW ON CERTAIN PSERIES HARDWARE WITH POWER5+ CPU'S
注: ICC の初期化に伴う遅延は V8.2 (V8.1FP7) 以降のすべての DB2 バージョンに適用されますが、V9.5 以前のバージョンでこの問題の修正予定はありません。

V9.7 FP7 以降および V10.1 以降に暫定修正が含まれています。この修正を有効にするには「解決方法」に記述した変数の設定が必要です。V10.1 以降には IC87954 (V10.1) および IC97731 (V10.5) が割り当てられています。なお、V9.7 FP9 以降および V10.1 FP3a、V10.5 FP3a 以降は正式修正が含まれています。このため、環境変数の設定は必要ありません。

Environment

以下のようなシステムで暗号化を行うと遅延が発生する可能性があります。
  • POWER 5+ 以降の CPU を搭載したシステム
  • LPAR や VMWare などの仮想化システム

ハードウェア構成に依存するため、上記のシステムで必ず問題が発生するわけではありません。

サーバーのデータベース・マネージャー構成パラメーター AUTHENTICATION に *_ENCRYPT が指定された場合、クライアントで暗号化したパスワードやデータがサーバーに送信されます。
ただし、DB2 クライアントのデータベース・カタログで認証タイプを指定しない場合、最初に暗号化パスワードでの認証が試行されます。
このため、本来は暗号化が不要な構成でも、この問題が発生することがあります。

IBM Data Server Driver for JDBC and SQLJ ドライバー (Jcc) は、暗号化に Java Cryptographic Extension (JCE) および Java Secure Socket Extension (JSSE) を使用しているため、この問題は発生しません。

Diagnosing The Problem

Db2 は cryptContextRealInit 関数の中で ICC ライブラリーの初期化を行います。
Db2 クライアントで、経過時間オプション (-t) 付きの Db2 トレースを採取すると cryptContextRealInit での遅延が確認できます。
 
  1. クライアントのインスタンス所有者 (UNIX/Linux) または Administrator (Windows) でクライアントにログインします。
  2. トレースを有効にして、接続の問題を再現させます。
    $ db2trc on -f trc.dmp -t
    $ db2 connect to <データベース名> user <ユーザー名> using <パスワード>
    $ db2trc off
    $ db2trc flw -t trc.dmp trc.flw
  3. cryptContextRealInit() で時間がかかっていることを確認します。以下の例では、ICC の初期化に約 10 秒かかっています。
    $ grep cryptContextRealInit trc.flw
    4985   5.098609441   | | | cryptContextRealInit entry
    4986   5.098609757   | | | cryptContextRealInit data [probe 10]
    5970  15.335248417   | | | cryptContextRealInit data [probe 100]
    5971  15.335248855   | | | cryptContextRealInit exit

Resolving The Problem

暗号化の要件があり、実際に問題に遭遇している場合、ICC ライブラリーを暫定修正バージョンに置き換える special build の適用により問題を解決できます。V10.5/V10.1 および V9.7 FP7 以降はこの暫定修正を含んでいます。
注: V9.7 FP9 以降、V10.1 FP3a 以降および V10.5 FP3a 以降は正式修正を含む GSKit v8.0.14.32 以降を含んでいます。このため、以下の環境変数の設定は不要です。

暫定修正を利用して ICC ライブラリー初期化における遅延の問題を解消するために、アプリケーションに対して以下の環境変数を設定する必要があります。
export ICC_IGNORE_FIPS=YES
export ICC_TRNG=ALT
注: Db2 サーバーでの ICC 初期に伴う遅延を解消するには、以下のような手段でインスタンスにこの環境変数を設定します。
export ICC_TRNG=ALT
export ICC_IGNORE_FIPS=YES
db2set DB2ENVLIST="ICC_TRNG ICC_IGNORE_FIPS"
注: Data Server Client や Runtime Client は GSKit のサブ・コンポーネントである GSkit-crypto のみを含んでいます。/usr/opt/ibm などにインストールされた global GSKit は GSKit-crypto より優先的にロードされるため、global GSKit のバージョンが 8.0.14.14 未満の場合は、環境変数の設定が有効になりません。
このケースでは、global GSkit のバージョンを 8.0.14.14 以上にアップグレードするか、DB2 がインストールした GSKit-crypto を優先的にロードするために LIBPATH/LD_LIBRARY_PATH の先頭に <インスタンス・パス>/sqllib/lib64/icc を追加してください。

修正を適用しても期待通りに ICC の初期化時間が短縮できない場合、以下の障害に該当している可能性があります。
IC97833: AUTHENTICATION VERY SLOW ON CERTAIN PSERIES HARDWARE WITH POWER7 CPU'S

回避策

暗号化の要件がない場合、以下のようにクライアントのデータベース・カタログで SERVER など、サーバーと同じ非暗号化の認証タイプを指定し、暗号化をバイパスできます。
注: V9.5 FP1 ~ FP3 および V9.1 FP4a ~ FP6 ではこの回避策を使用できません。
db2 uncatalog database <データベース名>
db2 catalog database <データベース名> at node <ノード名> authentication SERVER
db2 terminate
db2 connect to <データベース名> user <ユーザー名> using <パスワード>

データベース・サーバー上のローカル・クライアントの場合、ループバック接続を構成して AUTHENTICATION オプションを指定できます。
注: ここでデータベース名とデータベース別名が一致するような不正なループバック・カタログを行うと、データベースに接続できないだけでなく、無限にエージェントを生成するためシステムのメモリーと CPU を消費します。
db2 catalog TCPIP4 node LOOPNODE remote localhost server <サービス名>
db2 catalog database <データベース名> as <データベース別名> at node LOOPNODE authentication SERVER
db2 terminate
db2 connect to <データベース別名> user <ユーザー名> using <パスワード>

ICC ライブラリーの初期化はプロセスでの最初の暗号化要求で行われ、プロセス起動中に再度の初期化は行われません。このため、不要なプロセスの終了を減らすことで問題を軽減できる可能性があります。
たとえば、コマンド行プロセッサー (CLP) でデータベース接続を切るときは terminate ではなく connect reset に変更します。

関連情報
Db2 Performance Issue Related to Cryptography on Power Series Hardware
Db2 Authentication is slow on pSeries hardware with Power5 or later CPUs
リモート・クライアントの認証に関する考慮事項
(認証タイプを指定しない場合、クライアントのデフォルトは SERVER_ENCRYPT です。)
CATALOG DATABASE コマンド
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと 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":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;9.7.0"}]

Document Information

Modified date:
24 August 2023

UID

swg21597150