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 トレースを出力しないため再起動不要です。

    次の要領で設定します。
    1. Linux および UNIX の場合
      1. すべての Db2 プロセスを停止します
        以下のページを参照し、対象インスタンスに関連する Db2 のプロセスをすべて停止します。
        すべての DB2 プロセスの停止 (Linux および UNIX)
      2. DB2TRC_DEF_BUFFSIZE レジストリー変数を設定します
        db2trc off
        db2set DB2TRC_DEF_BUFFSIZE=512m
      3. インスタンスを開始します
        db2start
    2. Windows の場合
      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. db2pb.exe および db2systrav.exe を停止します
        taskkill /F /IM db2bp.exe
        taskkill /F /IM db2systray.exe
      3. DB2TRC_DEF_BUFFSIZE レジストリー変数を設定します
        db2trc off
        db2set DB2TRC_DEF_BUFFSIZE=512M
      4. インスタンスと関連するサービスを開始します
        db2start
        db2admin start
        net start DB2REMOTECMD_<DB2COPY名>
        net start DB2MGMTSVC_<DB2COPY名>
  3. 再度 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 に設定値が反映しない場合は、システムの再起動をお試しください。
  4. 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
  5. 調査対象となる事象を再現します
  6. トレース・レコードの収集を停止します
    db2trc stop
    stop を用いることで、トレースによる情報収集が直ちに停止します。
  7. トレース・バッファー上の情報をファイルに出力させます
    db2trc dmp db2trc.dmp
  8. Db2 トレースを停止します
    db2trc off
  9. 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 トレースを開始します (旧バージョンで -edu がエラーになる場合は除去します)
    db2trc on -perfcount -t -edu
  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

運用上の考慮点
関連情報
db2trc コマンド
db2trc を使用した Db2 トレースの取得
Db2 トレースのパフォーマンス・レポート
[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":"a8m500000008PljAAE","label":"DB2 Tools-\u003Edb2trace"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
26 October 2023

UID

swg22005377