パーソナルツール
現在の場所: ホーム ブログ DB2のLockを捕まえる・・・(2)
« 2017June »
Su Mo Tu We Th Fr Sa
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
このBlogについて
 代表の向井田ことMUKAです。当ブログサイトでは、MAGICやDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
最近のエントリ
新年おめでとうございます! muka 2013年01月01日
データ消失!(T_T) muka 2012年11月12日
ライトニングトーク初体験! muka 2009年12月03日
twitter / 新RT機能を英語モードで・・・ muka 2009年11月19日
twitter / List Widget muka 2009年11月03日
twitter API / Retweet の仕様が・・・ muka 2009年10月30日
twitter API / Lists muka 2009年10月24日
IBM Rational Software Conference 2009 と アジャイル開発 muka 2009年10月08日
最近のコメント
Re:Club DB2 2009/8/29 muka 2009年09月01日
Re:Club DB2 2009/8/29 SIM 2009年08月31日
最近のトラックバック
Club DB2 8/29の感想エントリと今後の予定 Unofficial DB2 BLOG 2009年09月01日
カテゴリ
misc (51)
dbMAGIC (51)
DB2 (51)
mail (51)
Web (51)
twitter (51)
 

DB2のLockを捕まえる・・・(2)


 前回は、db2pdの簡単なご紹介をさせて頂きました。
 今回は、そのもう少し高度な使い方や、作成したツールについてご紹介致します。




db2pdの高度な機能


 db2pdのオプションは種類が多いのが特長です。ざっと数えても40種近くあります。
 それらを分類すると、インスタンスに関連する情報をレポートするものと、データベースに関する情報をレポートするものの、2系統があるようです。
  • インスタンスに関連する情報をレポートするオプション
    インスタンスのエージェント、メモリ、データベース構成に関する情報を取得
  • データベースに関連する情報をレポートするオプション
    データベース毎のアプリケーション、トランザクション、バッファプール、ロック、表スペース、SQLステートメント等に関する情報を取得
すぐに全部をマスターするのは大変ですが、必要に応じて使いながら徐々に理解を深めていっては如何でしょうか?

 さて、先のIBMさんのドキュメントには、db2pdの使用例として、ロック待機の特定、デッドロックの調査の例が記載されています。実は今回のテーマ、きっかけは「この手順をもっと自動化しては・・・」ということから始まっています...。
 まず、次のようにしてロックの一覧を取得します。
db2pd -db データベース名 -locks

 実際にロックがない場合は出力されませんので注意!

次に、トランザクション、アプリケーション、動的SQLを取得します。
db2pd -db データベース名 -transactions -applications -dynamic

 上記のように複数のオプションを一括して指定が可能です。

下の図は、出力されたテキストを加工して主要な部分のみを抜きだしたものですが、Locks → Transactions → Applications → Dynamic SQL Statements とたどっていくことによって、ロックが起きているアプリケーションとそのクエリを確認することができることを示したものです。

v092_26.jpg

結果のダイジェスト。複数のテーブルを関連付けるとステートメントを求めることができる・・・。


 参考までに上図の元になったテキストファイルを掲載しておきます。

 結構、「暗号解読」みたいな手順が必要ですが、そのあたりもこのdb2pdの楽しさみたいなものかも知れませんw



ロック監視用ツールの作成


 ということで、DBMSのロックをdb2pdを使用して捕まえることができることがわかりました。しかし、コマンド操作に慣れていない場合や、複数の表の連結を人の目で行うにはちょっと難儀することがお分かり頂けるかと思います。そこで、db2pdの実行を自動化し、監視実行ボタンを押すだけで簡単にロックを捕獲できるようなツールを作成してみました。
 コマンドラインで実行した場合と比べてみたとき、次のような問題点を解決しています。

  • 自動監視と情報取得を連動
     db2pd 自体にも「-repeat」オプションがあります。これを使用することによって連続的に情報の取得が可能です。しかし結果をファイルに出力した場合、累積的にファイルに書き出されるので、取得時間が長くなると後の処理が大変です。
     当ツールでは、ロック検出と詳細情報取得の処理を分離することによって、ロックの検出があったときのみ情報を取得するようにしています。
     起動後、画面上にある「db2pdの実行」ボタンを押すと監視状態になります。

    v092_08.jpg

    起動画面。前回のdb2pd出力結果があればそれを表示します・・・。


     ロックを検出すると、直ちにトランザクション、アプリケーション、動的SQLの情報を取得(先に示したコマンドとほぼ同等のものを実行)します。

    v092_09.jpg

    ロックを検出すると自動ループが止まります。確認ボタンを押すと結果表示へ・・・。


  • テーブルを自動作成・自動連結
     取得したロック、トランザクション、アプリケーション、動的SQLの情報をワーク用のテーブルに読み込みます。カラムに納めるべき情報を識別して読み込みますので、ステートメント等は折り返していても連結して処理します。また、Ver 9.7用のdb2pdの出力結果は一部カラムが増えたり、長さが変わったりしていますが、9.5の書式と9.7の書式を自動判別してこれを処理しています。

    v092_10.jpg

    ロック検出結果画面。ロックに関連付けられたステートメントは自動的に表示します。


     動的SQLに関しては、別個に記載されている「Dynamic SQL Statements:」、「Dynamic SQL Environments」、「Dynamic SQL Variations」を連結して同じ行に表示します。見易くなりますね!

    v092_31.jpg

    SQLステートメントに関する3つの表は一つに連結されて表示します。

  • ロックに関する情報の絞り込み
     ロックの「TranHdl」(トランザクションハンドル)別に、関連するトランザクション、アプリケーション、ステートメントをそれぞれ自動表示します。基本はテキストを解読したのと同じですが、探す手間を省いてくれます。

    v092_27.jpg

    先のステートメントを求めた手順がロジック化されているので、ステートメントがすぐに・・・


     必要に応じて、取得したテーブルの全ての行を表示することも可能です。

    v092_28.jpg

    取得した表は個別に参照も可能です。各テーブルのコンテキストメニュー(マウス右ボタンのメニュー)から起動します。


  • カラムの意味をツールチップで表示
     カラムの意味をツールチップで表示しますので、普段db2pdに馴染まない方でもすぐに利用が可能です。

    v092_29.jpg

    項目にマウスを近づけると、ツールチップに意味を表示します。


  • 除外するロックを指定し、他のロックを取得
     一度読みこんだロックは除外することが可能です。継続して他のロックを検出させることが可能です。

    v092_30.jpg

    「除外」チェックボックスにチェックを入れて、他のロックを続けて検出・・・



終わりに


 このブログエントリの公開と前後して、「MAGIC Decrypter for V10 Version 0.92」を公開させて頂きました。すでにダウンロードされた方もいらっしゃるかもしれませんが、今回ご紹介したプログラムはその評価版の中に組み込んであります。
 この記事をお読み頂いて、使ってみようかな?と思われた方は是非お気軽に・・・。
 MAGICをお使いでない方も、もしかしたら、あらこんなものが(割と)簡単に組み込めるのか・・・と思って下されば幸いです(DB2もMAGICももっと普及して欲しいと思っておりますので・・・!)。

 今回は、短い連載となりました。が、db2pdは研究してみると更に新しい発見があるかも知れません。
 そのあたりもぜひ続編として掲載できればと思っています...。

<追記>
 早速お使い頂いている方から質問がありました。うまくロックを取得してくれないと・・・。
 db2pd はリモートサーバに対しては結果を取得することができません。なぜならローカル・メモリの内容を解析するからです。ということで、ご注意下さい。



DB2のLockを捕まえる・・・(1) DB2のLockを捕まえる・・・(1)
サイズ 8539 - File type text/html
カテゴリ
dbMAGIC
DB2