パーソナルツール
現在の場所: ホーム ブログ Categories dbMAGIC
« 2018January »
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 31      
このBlogについて
 代表の向井田ことMUKAです。当ブログサイトでは、MAGICやDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
最近のエントリ
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日
twitter API / geoタグ! muka 2009年10月01日
Twitter Developers Meetup in Tokyo muka 2009年09月11日
Club DB2 2009/9/4 muka 2009年09月05日
最近のコメント
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 (47)
dbMAGIC (47)
DB2 (47)
mail (47)
Web (47)
twitter (47)
 

dbMAGIC

一つ上に移動
dbMAGIC ( MAGIC SOFTWARE JAPANの開発ツール ) に関する話題等

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

 ご無沙汰してました。
 これだけブランクがあいてしまうと、どこからどうやって再開していいものか悩むんですが、まずは「最近、こんなものを作ってみました~!」というのを幾つか紹介していこうと思います。


DB2の問題判別ツール


 さて今回はDB2に関する話題です。
 DB2と言えば、先々月(6/14)、DB2の新しいバージョン(DB2 Ver9.7)がリリースされました。7月の初めにはイベントがあったり、解説本が出たり、また幾つかのIT系の雑誌などにも紹介されたりしましたので、徐々にその全貌が知られつつあるかと思います。
 実は私のほうでは、β版なるものを半年ほど前から評価させて頂いていたのですが、なかなか忙しくて新機能などを試すことができず、専ら9.5で動作していたアプリケーション(某ツール)を動かしてみる程度でした。まぁ、現時点の状況も同じ程度なのですが(実は、この間、9.7の障害対応等に追われていまして・・・(^^;)、徐々に試してみて、またここで紹介していきたいと思います。

 今回ご紹介するのは「db2pd」というDB2のツールです。いわゆる「問題判別に利用するコマンドラインツール」というものです。
 IBMのサイトでも使用法を解説したPDFが提供されています。

 db2pd コマンド使用ガイド

 さて、そのドキュメントによると、下記のような特長があるとのことです。

  • スタンドアローンのユーティリティでデータベースに接続せずに使うことができる
  • Informix のonstat ユーティリティに良く似ており、onstat と同様の使用方法、機能を持っている
  • コマンドラインから実行する。対話モードでの実行も可能
  • スナップショット・モニターやイベント・モニターと異なり内部的にロックやラッチを取らない。したがって、高速に実行することができ、かつ、データベース本体へ与える影響が小さい
  • DB2 エンジンの外で実行されるので、DB2 エンジンがハングしている状態でも使用可能である
  • DB2 エンジンに、より近い情報を取得することができる

 ここで重要なのは、「DB2 が使用しているメモリー上の情報を読み取って解析」しているという点です。「ハングアップした状態でも使用可能」とありますが、当然ながら(ハングアップしていない)アプリケーションの実行中でもその動作状況に影響を与えずに情報の取得ができるということです。
 コマンドラインのオプションが多数あって、アプリケーション、トランザクション、ロック、SQLステートメント等、さまざまな情報を取得することが可能です。
 このツール、私が良く行かせて頂いているクラブDB2でもいわゆる「お勧めツール」の筆頭に挙げられていまして、紹介される度に「いつかマスターしなくては・・・」と思っておりました。


db2pdを動かしてみる


 それでは、手始めに、db2pdを使ってOS情報を取得してみましょう。
 通常、DB2のコマンドはいわゆる「CLP」というDB2のコマンドプロンプトで起動するんですが、このツールの場合は、普通の「DOS窓」でもOKです。もしWindows XPの環境ならスタートメニューから「ファイル名を指定して実行」を開き、「cmd」と打って下さい(もちろんCLPを起動してもOKです!)。
 コマンドプロンプトが現れたら、次のように入力します。
db2pd -osinfo
結果が画面に表示されましたか?正常に起動するとOSやCPU、メモリ等の情報を表示してくれます。

v092_21.jpg

db2pdによりOS情報を取得した画面



 今度は、少し複雑になりますが、アプリケーションに関する情報を取得してみます。適当なデータベースに接続して次のコマンドを実行します。
db2pd -db データベース名 -applications

 「データベース名」にはアクティブに接続しているデータベースの名称を指定します。 

さて、結果はどうなりましたか?

v092_22.jpg

db2pdによりApplication情報を取得・・・。行が折り返されて見辛い・・・。


 実はこの出力結果は、改行までの横幅が206~320バイトあるので、折り返してしまうのです。
 もう少し見易くするには、DOS窓のプロパティを変更すると解決します。

v092_23.jpg

DOS窓のプロパティで設定値を変更してみる・・・


 「レイアウト」タブを開き、画面バッファのサイズの「幅」を320に変更します。

v092_24.jpg

画面バッファのサイズを320程度に変更します。


 更に、若干フォントサイズも小さく(「6 x 13」等を選択)すると良いかもしれません。OKボタンを押して変更結果を反映させます。プロパティの適用確認画面が出たら取り敢えず最初は「現在のウインドウだけに適用する」を選択して下さい。
 さて結果は如何でしょうか?(コマンドを再実行する必要があります)今度はだいぶ見易くなりました!

v092_25.jpg

今度は行が折り返されなくなったのでだいぶ見易くなった・・・。

ディスプレイの解像度が良ければウインドウを広げたり、画面下のスクロールバーをスライドさせると隠れている部分も見えるようになります。フォントサイズも小さくできるのですが、あまり小さくしすぎて読めなくなってしまってはしょうがないですね。
 こういうときはファイルに出力して、メモ帳や、もう少し気の利いたテキストエディタで読むと良いかもしれません。
 結果をファイルに出力するためには、次のようにオプションを加えます。
db2pd -db データベース名 -applications -file ファイル名

 「-file ファイル名」の代わりに、「file=ファイル名」でもOKのようです。勿論OSの機能を使ってリダイレクトで出力する手もありますが・・・。


今回のまとめ


 db2pdの出力は、メモリ内に格納している状態を表形式で出力するのですが、独特な情報なので馴染むには若干の慣れが必要かもしれません。

でも、習得することによって、DB2の仕組みに近い情報を理解することができるのではないかと期待させてくれます。
 次回は、もう少し高度なdb2pdの使い方と、作成したツールについて説明しようと思います。



カテゴリ
dbMAGIC
DB2

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