IBM Support

[Db2] db2trc コマンドを用いた Db2 トレースの取得方法

Question & Answer


Question

db2trc コマンドを用いた Db2 トレースの取得方法を教えてください。

Answer

Db2 トレースの一般的な取得方法をご案内します。


A. トレースを直接ファイルに出力する方法

db2trc コマンド実行中のすべてのトレース情報をファイルに出力する方法です。
問題発生に至るまでのすべての処理内容を確認する場合などに使用します。I/O による遅延が大きいため、パフォーマンス問題の調査には適しません。Db2 トレースの出力は数十秒で数百 MB から数 GB 生成されるため、ファイルの出力先には十分な空きスペースが必要となります。

1. Db2 トレースを開始します
  • db2trc on -t -f db2trc.dmp





  •  
ここで -t オプションは経過時間を記録します。上記の例では、コマンド実行ディレクトリーに db2trc.dmp というファイルが生成され、トレースを停止するまで情報が追記されます。

2. 調査対象となる事象を再現します

3. Db2 トレースを停止します
  • db2trc off

4. Db2 トレース出力をフォーマットします
  • db2trc flw -t -wc db2trc.dmp db2trc.flw
    db2trc fmt db2trc.dmp db2trc.fmt
    db2trc fmt -c db2trc.dmp db2trc.fmtc

ここで -t -wc オプションは、flw 出力に時刻 (Wall clock) のタイムスタンプを追加し、 -c オプションは、fmt 出力に通信バッファーのフォーマット出力を追加します。また、上記の例では、コマンド実行ディレクトリーに db2trc.flw、db2trc.fmt、db2trc.fmtc というファイルが出力されます。


B. トレース・バッファー内のトレースを取得する方法

メモリー上でトレースを取得する方法です。
ファイルにトレースを取得する方法と比較すると、システム負荷は大幅に低くなります。数秒から数十秒程度の短時間トレースを取得する場合に適します。

1. 現在のトレース・バッファー・サイズを確認します

以下の要領で現行のトレース・バッファー・サイズを確認し、トレース・バッファーの拡張が必要かどうか確認してください。

一度 db2trc on コマンドでトレースをオンにした後に、 db2trc info コマンドを実行し、出力中の "maxBufferSize" の項目を確認します。確認した後には db2trc off でトレースを停止しておきます。
  • $ db2trc on
    Trace is turned on
    $ db2trc info
    Marker                  :  @TRACE@
    Trace version           :      7.0
    Platform                : AIX 64BIT
    Build level             : s140813
    maxBufferSize           : 134217728 bytes (128 MB)
    auxBufferSize           : 0 bytes (0 MB)
    allocationCount         : 2
    DB2TRCD pid             : 0
    Trace destination       : <shared memory buffer>
    numSuspended            : 0
    Trace starting time     : 2017-06-28-15.38.59.697566+540

    Buffer size             : 134217728 bytes (128 MB)
    (..略..)

    $ db2trc off
    Trace is turned off

上記の例では、128 MB のトレース・バッファーが使用可能と分かります。


2. トレース・バッファー・サイズを変更します

もし db2trc info 出力中の maxBufferSize を越えるトレース・バッファーを使用する場合は、次の要領でトレース・バッファーを拡張してください。トレース・バッファーの拡張が不要の場合は、このステップはスキップし、次のステップ 3 に進んでください。

トレース・バッファーのサイズを変更するには、 DB2TRC_DEF_BUFFSIZE レジストリー変数にサイズを指定した後に、対象とする Db2 インスタンスと、そのインスタンスに関連するすべての Db2 プロセスおよびクライアント・プロセス (※) を再起動して設定を反映させます。
※ JDBC Type 4 を使用するクライアント・プロセスは、もとより Db2 トレースを出力しないため再起動不要です。

次の要領で設定します。

2.1 Linux および UNIX の場合

2.1.1 すべての Db2 プロセスを停止します

Knowledge Center の次のページを参照の上、対象インスタンスに関連する Db2 のプロセスをすべて停止します。

すべての DB2 プロセスの停止 (Linux および UNIX)

2.1.2 DB2TRC_DEF_BUFFSIZE レジストリー変数を設定します
  • db2trc off
    db2set DB2TRC_DEF_BUFFSIZE=512m





  •  
2.1.3 インスタンスを開始します
  • db2start


2.2 Windows の場合

2.2.1 インスタンスと関連するサービスを停止します
  • db2 deactivate db <database name>
    db2 force application all
    db2stop
    db2admin stop
    net stop DB2REMOTECMD_<DB2COPY名>
    net stop DB2MGMTSVC_<DB2COPY名>

ここで <DB2COPY名> は、DB2COPY1 など、適宜実際のサービス名と置き換えてください。
サービス名は Windows のコントロール パネルの [サービス] より確認するか、次のコマンドで確認します。
  • sc query | find "SERVICE" | find "DB2"

2.2.2 db2pb.exe および db2systrav.exe を停止します
  • taskkill /F /IM db2bp.exe
    taskkill /F /IM db2systray.exe

2.2.3 DB2TRC_DEF_BUFFSIZE レジストリー変数を設定します
  • db2trc off
    db2set DB2TRC_DEF_BUFFSIZE=512M

2.2.4 インスタンスと関連するサービスを開始します
  • db2start
    db2admin start
    net start DB2REMOTECMD_<DB2COPY名>
    net start DB2MGMTSVC_<DB2COPY名>

再度 db2trc info を実行すると、DB2TRC_DEF_BUFFSIZE に設定した値が maxBufferSize に設定され、指定したトレース・バッファー・サイズが反映されていることがわかります。
  • $ db2trc on
    Trace is turned on
    $ db2trc info
    Marker                  :  @TRACE@
    Trace version           :      7.0
    Platform                : NT 64BIT
    Build level             : s150731
    maxBufferSize           : 536870912 bytes (512 MB)
    auxBufferSize           : 0 bytes (0 MB)
    allocationCount         : 1
    DB2TRCD pid             : 1368
    Trace destination       : <shared memory buffer>
    numSuspended            : 0
    Trace starting time     : 2017-06-30-21.23.35.652000+540

    Buffer size             : 536870912 bytes (512 MB)
    (..略..)

    $ db2trc off
    Trace is turned off

もし、どうしても maxBufferSize に設定値が反映しない場合は、システムの再起動をお試しください。

3. Db2 トレースを開始します
  • -l オプションを用いる場合
    引数にトレース・バッファーのサイズを指定します。トレースを停止するまでトレース情報が循環モードで記録されるため、古い情報は上書きにより失われます。トレースに捉えたい事象がいつ発生するかわからない場合には、-l オプションでトレースを開始しておき、事象発生後直ちに停止するようにします。

    db2trc on -t -l 512m

    -i オプションを用いる場合
    引数にトレース・バッファーのサイズを指定します。トレース・バッファーが満杯になると、トレースの書き込みが停止します。あるコマンド投入後、数秒で完了する処理をトレースに捉えたい場合には、このコマンド投入の直前に -i オプションでトレースを開始し、この処理の開始時点からトレースを記録できるようにします。

    db2trc on -t -i 512m

注意: トレース開始時に次のように、Trace is turned on の後に、指定したトレース・バッファーのサイズより小さなサイズが表示された場合は、ステップ 2 を再度実施してください。
  • $ db2trc on -t -l 512m
    Trace is turned on, buffer size 134217728 bytes ( 128 MB ).

指定したサイズのバッファーでトレースが活動化された場合は次のように出力されます。
  • $ db2trc on -l 512m
    Trace is turned on

4. 調査対象となる事象を再現します

5. トレースを停止します
  • db2trc stop

stop を用いることで、トレースによる情報収集が直ちに停止します。

6. トレース・バッファー上の情報をファイルに出力させます
  • db2trc dmp db2trc.dmp

7. Db2 トレースを停止します
  • db2trc off

8. Db2 トレースの出力情報をフォーマットします
  • db2trc flw -t -wc db2trc.dmp db2trc.flw
    db2trc fmt db2trc.dmp db2trc.fmt
    db2trc fmt -c db2trc.dmp db2trc.fmtc

C. パフォーマンス・カウンターの取得方法
トレース・バッファー内に、Db2 内部関数の呼び出し回数と合計処理時間のみ取得する方法で、パフォーマンス問題の調査に用います。システム負荷が低く、トレース・バッファーもデフォルトの小さなサイズで十分ですが、取得できる情報が非常に限定されるため、他のトレース取得方法が使用出来ない場合に利用します。

1. Db2 トレースを開始します
  • db2trc on -t -perfcount

2. 調査対象となる事象を再現します

3. トレース・バッファー上の情報をファイルに出力させます
  • db2trc dmp db2trc.dmp

4. Db2 トレースを停止します
  • db2trc off

5. Db2 トレースの出力情報をフォーマットします
  • db2trc perffmt db2trc.dmp db2trc.perffmt


D. パフォーマンス・レポートの作成方法

-t オプションをつけて開始したDb2 トレースのダンプ・ファイル (上記の db2trc.dmp) は、perfrep コマンド引数を用いてフォーマットすることで、Db2 トレースのパフォーマンス・レポートを作成することができます。 (-perfcount オプションで取得されたトレースを除く)
  • 各関数で費やされた時間を抽出する場合
  • db2trc perfrep db2trc.dmp db2trc.perfrep -sort timeelapsed
  • 各関数で費やされた経過時間を抽出する場合
  • db2trc perfrep db2trc.dmp db2trc.perfrep -sort timespent

なお、抽出結果をプロセス ID (PID) およびスレッド (TID) ごとに集計したい場合には、次のように -g オプションも指定します。
  • db2trc perfrep db2trc.dmp db2trc.perfrep -g -sort timeelapsed
    db2trc perfrep db2trc.dmp db2trc.perfrep -g -sort timespent


運用上の考慮点
  1. 1. DPF 環境の場合、全ノードで取得してください。
    最低でもカタログノードと、障害が発生しているノードの両方で取得してください。
    物理ノードが一つで論理ノードが複数の場合は、db2trc on とすれば、全論理ノード分取得されます。物理ノードが複数存在する場合は、db2trc on [オプション] -member all もしくは rah "db2trc on [オプション]"をご使用下さい。
  2. トレース・オンの状態で Db2 が異常終了した場合、トレースは自動的に停止されるため、明示的に停止する必要はありません。オプション -i および -l で開始されたトレースは、$DIAGPATH に「db2trdmp.<ノード番号>」の形式で自動的に出力されます。このファイルをフォーマットした、flw、fmt、fmtc ファイルを送付してください。
  3. db2trc コマンド実行に関連して、影響の可能性のある APAR にはご注意ください。

    主なものを記載いたします。
    IT32589: CDE JOIN CAUSES CRASH WHEN DB2 TRACE IS TURNED ON
    カラム・オーガナイズ表の JOIN が行われてるときに db2trc を有効にするとインスタンスが停止します。V11.5.4 で修正されています。
    IC98864 DB2TRC BUFFER ALLOCATION (V10.1) V10.1 フィックスパック 4 で修正されています。
    IC94860 DB2TRC BUFFER ALLOCATION (V10.5) V10.5 フィックスパック 4 で修正されています。(IC98864 と同じ障害です)
    IC81303 B2TRC -WC REPORTS UNEXPECTED WALL-CLOCK (-WC) TIMESTAMPS (V9.7) V9.7 フィックスパック 6 で修正されています。
    IC78971 DB2 CRASHES WHEN RUNNING A DB2TRC WITH -APPHDL OPTON (V9.7) V9.7 フィックスパック 6 で修正されています。
    IT07268 INCORRECT RUNTIME STQ STATISTICS WITH DB2TRC -M CDE_PERF_TRACE (V10.5) V10.5 フィックスパック 6 で修正されています。
    IC84365 DB2TRC -WC REPORTS UNEXPECTED WALL-CLOCK (-WC) TIMESTAMPS (V10.1) V10.1 フィックスパック 1 で修正されています。
    IT00318 'DB2TRC' COMMAND MIGHT USE ONLY 8MB OF TRACE BUFFER (V9.7) V9.7 フィックスパック10 で修正されています。
    IC89927 B2TRC FAILS WHILE LOADING SHARED LIBRARIES LIBCA_API.SO(V10.1) Db2 クライアントの障害です。V10.1 フィックスパック 3 で修正されています。
    IC66975 WORKING CLI/ODBC APPLICATIONS WILL EXIT ABNORMALLY WHEN DB2TRC IS ON (V9.7) CLI/ODBC アプリケーションに関連する障害です。 V9.7 フィックスパック 2 で修正されています。
    IC62535 POTENTIAL INSTANCE TRAP WHEN DB2TRC IS RUNNING AND DIAGLEVEL > 2 (V9.7) V9.7 フィックスパック 1 で修正されています。
    IT17501 CLIENT SIDE PERFORMANCE PROBLEMS IN CASE OF MISSING DB2TRC SHARED MEMORY SEGMENT (V10.5) Db2 クライアントの障害です。V10.5 フィックスパック 9 で修正されています。
    IC95209 Instance crash during migrating or restoring database from lower release when db2trc is enabled (V10.5) V10.5 フィックスパック 4 で修正されています。
    IC74419 DB2TRC MIGHT TRAP WHEN FORMATTING LONG CLI MESSAGE WHILE PARSING A TRACE RECORD FOR SQLGETDIAGFIELDW (V9.7) V9.7 フィックスパック 4 で修正されています。
    IC71663 DB2TRC TRAPS WHILE FORMATTING COMMUNICATIONS BUFFER OF A TRACE DUMP FILE (V9.7) V9.7 フィックスパック 4 で修正されています。
    IC94283 SQLSetEnvAttr() WITH SQL_ATTR_DB2TRC_STARTUP MAY FAIL WITH SQL_INVALID_HANDLE ERROR (V9.7) CLI (ODBC/JDBC Type2)出の障害です。9.7 フィックスパック 9 で修正されています。
    IT07969 DB2START THROWS SQL1042C ERROR WHEN SSL IS CONFIGURED AND DB2TRC ENABLED, DB2SYSC CRASHE (V10.5) V10.5 フィックスパック 7 で修正されています。
    IT13710 DB2 EXCEPTION HANDLER IS RECURSIVELY CALLED AND THE INSTANCE IS CRASHED DUE TO STACK OVERFLOW WHEN DB2TRC IS ACTIVE ON WINDOWS (V10.5) Windows 環境のみ。V10.5 フィックスパック 9 で修正されています。
    IC81888 MEMORY LEAK IN APPLICATION OR MSDTC.EXE USING IBM DS DRIVER DUE TO LEAKS IN DB2TRC MEMORY AND CACHE USED BY SECURITY(V9.7) Windows 環境のみ。V9.7 フィックスパック 6 で修正されています。
    IT13176 DB2 EXCEPTION HANDLER IS RECURSIVELY CALLED AND THE INSTANCE IS CRASHED DUE TO STACK OVERFLOW WHEN DB2TRC IS ACTIVE ON WINDOWS(V9.7) Windows 環境のみ。V9.7 フィックスパック 5 で修正されています。
    IT13658 DB2 EXCEPTION HANDLER IS RECURSIVELY CALLED AND THE INSTANCE IS CRASHED DUE TO STACK OVERFLOW WHEN DB2TRC IS ACTIVE ON WINDOWS (V10.1) Windows 環境のみ。APAR IT13176 と同じ問題です。V10.1 フィックスパック 6 で修正されています。
    IC63913 THE ELAPSED TIME SHOWN IN DB2TRC FLOW OUTPUT FILE COULD BE WRONG WHEN "-T" AND "-P" ( AND/OR "-M" ) OPTIONS ARE SPECIFIED.(V9.7) V9.7 フィックスパック 2 で修正されています。
    IC75990 DB2TRC IN CASE OF A CRASH DUMPS BUFFER IN DB2INSTHOME/SQLLIB/DB2DUMP EVEN IF DIAGPATH IS DIFFERENT(V9.7) V9.7 フィックスパック 5 で修正されています。
    IT13176 DB2 EXCEPTION HANDLER IS RECURSIVELY CALLED AND THE INSTANCE IS CRASHED DUE TO STACK OVERFLOW WHEN DB2TRC IS ACTIVE ON WINDOWS(V9.7) Windows 環境のみ。V9.7 フィックスパック 6 で修正されています。
    IT13658 DB2 EXCEPTION HANDLER IS RECURSIVELY CALLED AND THE INSTANCE IS CRASHED DUE TO STACK OVERFLOW WHEN DB2TRC IS ACTIVE ON WINDOWS(V10.1) Windows 環境のみ。APAR IT13176 と同じ問題です。V10.1 フィックスパック 6 で修正されています。
    IC63913 THE ELAPSED TIME SHOWN IN DB2TRC FLOW OUTPUT FILE COULD BE WRONG WHEN "-T" AND "-P" ( AND/OR "-M" ) OPTIONS ARE SPECIFIED.(V9.7) V9.7 フィックスパック 2 で修正されています。
    IC75990 B2TRC IN CASE OF A CRASH DUMPS BUFFER IN DB2INSTHOME/SQLLIB/DB2DUMP EVEN IF DIAGPATH IS DIFFERENT(V9.7) V9.7 フィックスパック 5 で修正されています。
  4. コマンド実行によるシステム・パフォーマンスへの影響については、以下の文書をご確認ください。

    DB2 の資料収集によるシステム・パフォーマンスへの影響

関連情報
db2trc コマンド
db2trc を使用した DB2 トレースの取得
DB2 トレースのパフォーマンス・レポート
パスポート・アドバンテージによく寄せられる質問


お問合せ先
Db2 の Continuing Support は、2024年4月30日に終了します。
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"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":"a8m500000008PljAAE","label":"DB2 Tools-\u003Edb2trace"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Version(s)"}]

Document Information

Modified date:
23 August 2023

UID

ibm16091234