Comments
Description
Transcript
簡単シリーズ スナップショット・モニター編 スナップショット・ モニター編
簡単シリ 簡単シリーズ スナップショ スナップショット・モニター編 モニター編 2002/03 SS&WSCC#1 目次 データベース・ モニター・ ツール スナップショット・モニター スナップショット・モニターの取得 スナップショット・モニター・コマンド スナップショット・モニターの取得手順 スナップショット・モニター情報の出力例 ※ この資料ではDB2 UDB for Windows V7.2 + FIXPACK5の環境でテストした結果を載せています。 Systems Solution & Web Server Competence Center No.1 DM Group 1-2 データベース・モニター・ツール DB2が提供する主なモニター・ ツール SQL文がDB2によって どのように処理 されるかが知りたい EXPLAIN デッドロックの原因は? アプリケーションのどこに時間 がかかっているのだろう? イベント・モニター スナップショット・ モニター DB2の現在の活動状態 を知りたい Systems Solution & Web Server Competence Center No.1 DM Group データベース・モニター・ツール 活動中のデータベースの状態をモニターしたり解析するためにDB2が提供する主なツールをご紹介します。 EXPLAIN SQL文の実行経路に関する情報を取得します。 イベント・モニター 特定の時間内( モニターをかけている間) に発生したイベントを記録します。 各イベントの完了時に活動情報を提供します。 収集可能なイベントには以下のようなものがあります。 デッドロック SQL文の実行 トランザクションの完了 データベースへの接続 スナップショット・モニター スナップショット・モニターは、リクエストが出された特定の時点のデータベースの活動状態に関する情報を提供します。発生 した事象の回数や処理時間の累計、資源の現在の値、最大使用量等が出力されます。 出力される情報には以下のようなものがあります。 バッファープール等資源の使用状況 現在データベースに接続している数 デッドロックの発生数 CPU使用時間 Systems Solution & Web Server Competence Center No.1 DM Group 3-4 スナップショット・モニター スナップショット・モニターでは様々なレベルの切り口で情報を取得することができますので、必要に応じて選択する必要があります。 主なスナップショット・モニター出力の内容 データベース・スナップショット データベース・ロック・スナップショット ・ロック関連情報 ・ ・ ・ アプリケーション・スナップショット ・稼動中のアプリケーション毎の ロック関連情報 アプリケーションがロックを保持 している資源 ・ソート関連情報 ・ ・ ・ ・稼動中のアプリケーション毎の情報 ロック関連情報 ソート関連情報 バッファープール関連情報 SQL関連情報 キャッシュ関連情報 ・バッファープール関連情報 ・ ・ ・ バッファー・スナップショット 表スペース・ スナップショット ・ バッファープール毎の情報 ・表スペース毎の バッファープール情報 bufferpool1 ・ ・ ・ bufferpool2 ・ ・ ・ ・SQL関連情報 ・ ・ ・ ・キャッシュ関連情報 ・ ・ ・ tablespace1 ・ ・ ・ tablespace2 ・ ・ ・ tablespace3 ・ ・ ・ Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター スナップショット・モニターは、データベース・マネージャーやデータベース・オブジェクトに関する様々なレベルの情報を収集することができ ます。 データベース・ マネージャー データベース( ローカル、リモート、DCS) アプリケーション(ローカル、リモート、DCS) FCM( DB2エージェント間の内部通信の場合) バッファープール 表スペース 表 ロック 動的SQL文 スナップショット・モニターでは様々なレベルの切り口で情報を取得することができますので、必要に応じて選択する必要があります。 ここでは、よく取得される情報とその用途を一覧します。 GET SNAPSHOT FOR xx 用途 DATABASE データベース全般の状態を把握可能。 DATABASE全体を確認後、APPLICATIONSやBUFFERPOOLSなど特 定の情報について詳細を確認していく APPLICATIONS BUFFERPOOLS LOCKS TABLESPACES 稼働中のアプリケーション毎のバッファープールやキャッシュ等資源の 使用状況やSQLの発行数、CPU時間を確認可能 バッファープール毎の使用状況を確認可能 データベースに接続中のアプリケーションが保持しているロック資源を 確認可能 表スペース毎のバッファープール使用状況を確認可能 注) APPLICATIONSで取得される情報は、BUFFERPOOLSやLOCKSの情報の基本的な部分を含んでいますが、一度に取得 できる情報が非常に多いので、特定の情報だけが必要なときは個々に取得します。 Systems Solution & Web Server Competence Center No.1 DM Group 5-6 スナップショット・モニターの取得 スナップショット・モニターはコマンドやコントロール・センターから使用できます。 スナップショット・モニターを使用するには、SYSADM,SYSCTRL,SYSMAINTの権限が必要となります。 モニタースイッチはインスタンス全体または各セッション毎に制御できます。 イベント・モニターには影響を与えません。 スナップショット・モニターを操作するために以下のコマンドが提供されています。 GET MONITOR SWITCHES UPDATE MONITOR SWITCHES RESET MONITOR GET SNAPSHOT FOR 上記以外にデータベース・ マネージャー構成パラメータに対して操作を行うコマンドもあります。 出力項目の種類 カウンター: 値が累積されていく項目 リセット・コマンドにて値の初期化が可能 ゲージ: 現在の値を示す項目 ウォーターマーク: 最大/最小値を示す項目 リセット不可能 時間:活動に費やした秒数/マイクロ秒数 スナップショットを取得するには同一セッション内で一連の操作を実行する必要があります。 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニターの取得 DB2では常にデフォルトでいくらかの基本情報は収集されていますが、モニター・スイッチをオンにすると、各レベルについて、より 多くのデータを収集することができます。 グループ 提供される情報 モニター・スイッチ DBM CFGパラメータ ソート 使用されたヒープ数、オーバーフロー、ソート・ パフォーマンス SORT DFT_MON_SORT ロック ロックを保持している資源、ロック待ち情報 LOCK DFT_MON_LOCK 表 読み/書きされた行数 TABLE DFT_MON_TABLE バッファー・プール 読み/書き回数、所要時間 BUFFERPOOL DFT_MON_BUFPOOL 作業単位 開始/終了時刻、完了状況 UOW DFT_MON_UOW SQL文 開始/終了時刻、文の識別 STATEMENT DFT_MON_STMT スナップショット・モニターのレベルとスイッチの組合せによって、スナップショットを取得したときに提供される情報は異なります。 適切なモニター・スイッチがオンになっていないと、必要な情報が表示されないことがあります。 モニター・ スイッチはインスタンス・レベルと各セッション・レベルで制御ができます。 データベース・ マネージャー構成パラメータの値を変更した場合、通常、その値を有効にするためにはインスタンスの停止/再始動が必 要ですが、モニター・ スイッチ関連パラメータについては動的変更が可能です。 動的変更が発生しても既存のスナップショット・アプリケーションへの影響はありません。 スイッチの新しいデフォルト値を適用するため には、 モニター・ アプリケーションを終了してから、再び接続を確立する必要があります。 Systems Solution & Web Server Competence Center No.1 DM Group 7-8 スナップショット・モニターの期間 データベース・ マネージャーによって収集される情報が初期設定されるタイミングは以下のようになっています。 スイッチで制御されるカウンター そのモニター・スイッチをオンにしたとき 該当オブジェクトが活動状態になったとき アプリケーション・レベル・モニターが使用され、アプリケーションがデータベースに接続したとき データベース・ レベル・ モニターが使用され、最初のアプリケーションが接続したとき 表レベル・モニターが使用され、表が最初にアクセスされたとき バッファープール・レベル・モニターが使用され、表スペースが最初にアクセスされたとき データベース・ オブジェクト・レベルの全ての活動が終了した時点 データベースへの接続が全てクローズされると、データベースレベルの情報はクリアされます 全てのデータベースが切断されると、ステートメント・キャッシュがクリアされます データを残したい場合は、ACTIVATE DATABASEを実行しておく必要があります データベース・スナップショット データベース名 = SAMPLE データベース・パス = C:¥DB2¥NODE0000¥SQL00003¥ 入力データベース別名 = SAMPLE データベース状況 = Active カタログ・ノード番号 =0 カタログ・ネットワーク・ノード名 = N0027368 データベース・サーバーで実行中のオペレーティング・システム = NT データベースのロケーション = ローカル 最初のデータベース接続タイム・スタンプ = 03/22/2002 11:13:52.712504 最後のリセット・タイム・スタンプ = 03/22/2002 15:07:26.230629 最後のバックアップ・タイム・スタンプ = スナップショット・タイム・スタンプ = 03/22/2002 15:07:42.928799 Systems Solution & Web Server Competence Center No.1 DM Group ブランク・ ページ Systems Solution & Web Server Competence Center No.1 DM Group 9-10 データベースへの最初の接続または ACTIVATE DATABASEコマンドの実行時刻 RESET MONITORコマンドによりカウンターが リセットされた時刻 スナップショット・モニターが取得された時刻 スナップショット・コマンドの影響範囲 スナップショット・モニターに対してコマンドを実行した時の影響範囲についてみてみましょう。 ※Tnは時間の経過(コマンド入力順序)を表しています スイッチリスト コピー bufferpool=off ・・・ T0 セッション1開始 スイッチリスト bufferpool=on ・ ・ ・ DBMスイッチリスト コピー bufferpool=off スイッチリスト lock=off bufferpool=off ・・・ ・・・ uow=off T0 セッション2開始 T1 update monitor switches using bufferpool on T2 select * from org T3 get snapshot for database on sample T3 get snapshot for database on sample seelct実行:1 バッファープール情報:○ データ論理読取: 11 T4 update monitor switches using bufferpool on T5 select * from project T6 get snapshot for database on sample T7 reset monitor all select実行 2 バッファープール情報:○ データ論理読取:15 T6 get snapshot for database on sample T8 select * from sales seel ct実行 1 バッファープール情報:○ データ論理読取:4 seelct実行:1 バッファープール情報:× スイッチリスト bufferpool=on ・ ・ ・ select実行:2 バッファープール情報:○ データ論理読取: 4 T9 get snapshot for database on sample T9 get snapshot for database on sample データベース: SAMPLE seel ct実行:3 バッファープール情報:○ データ論理読取:8 各セッションにおけるパラメータの変更は他のセッションに影響を与えません DBMスナップショット・モニター値のコピーを、それぞれ独自に所有しています。 但し、DBMレベルでオフになっているモニターは、各セッションのモニターのオンに連動してDBMのモニターがオ ンなり、各セッションのモニターが全てオフになった時点で該当のモニターもオフになります。 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・コマンドの影響範囲 バッファープール関連項目はバッファープール・スイッチをオンにしないと出力されない項目なので、スイッチと収集期間との関連を確認するた めに着目しています。また、バッファー・ プール・データ論理読み取り( 前ページでは” データ論理読取”と表す)とSelect SQL ステート メント実行(前ページでは”select実行”と表す)は共にカウンター項目なので、数値リセットのタイミングを確認するために着目しています。 また、Select SQL ステートメント実行 は基本項目としてデフォルトでデータが収集されますが、バッファー・プール・データ論理読み取りは バッファープール・スイッチをオンにしないと出力されない項目です。 T3 GET SNAPSHOT セッション1,2ともにT2で実行されたselect文をカウントしているのでselect実行回数は1となっています。 セッション1はバッファープール・スイッチをオンにしているので(T1)、バッファー・プール関連情報が出力されますが、セッション2はT1のスイッチ変更の 影響を受けずにバッファープール・ スイッチがオフのため、情報が出力されません。 T6 GET SNAPSHOT セッション1,2ともにT2とT5で実行されたselect文をカウントしているのでselect実行回数は2となっています。 この時点ではセッション2もバッファープール・スイッチをオンにしているので(T4)バッファー・プール関連情報が出力されています。 バッファー・プール・データ論理読み取り回数に注目すると、セッション2はT4でカウンターがゼロにリセットされているため、T5のselect文のみが カウントされて4となり、セッション1はT3時点の11にT5の4を加えて15となっています。 T9 GET SNAPSHOT セッション1はT7でリセット・コマンドを実行しているため、それ以降に実行されたT8のみをselect実行回数としてカウントしていますが、セッション2は リ セット・コマンドの影響を受けずにT2,T5,T8のselect文をカウントしているので、select実行回数は3となっています。 バッファー・プール・データ論理読み取り回数についても、セッション2はT5にT8分を加えて8、セッション1はカウンターがリセットされているためT8 のみをカウントしていて4となっています。 セッション1ではリセット・コマンドを実行していますが、モニター・スイッチには影響を与えませんので、バッファープール関連情報は出力されています。 スナップショット・モニターは同一セッションの活動のみを提供するのではなく、データベース全体の活動状況を提供します。 Systems Solution & Web Server Competence Center No.1 DM Group 11-12 スナップショット・モニター・コマンド -GET MONITOR SWITCHESスナップショット・モニターのコマンドはデータベース・マネージャー構成パラメータに対して操作を行うものと各セッションのモニター・スイッ チに対して行うものがあります。 以下、スナップショット・モニターの操作を行うコマンドを紹介します。(主なパラメータのみ) スナップショット・モニター・スイッチのデータベース・マネージャー・レベルで現行設定を調べるとき db2 => GET DBM MONITOR SWITCHES; DBM システム・モニター情報集 ノード 0 のスイッチ・リスト バッファー・プール活動情報 ロック情報 ソート情報 SQL ステートメント情報 表活動情報 作業単位情報 (BUFFERPOOL) = ON 03/07/2002 13:06:24.226568 (LOCK) = ON 03/07/2002 13:06:24.186127 (SORT) = ON 03/07/2002 13:06:24.073545 (STATEMENT) = OFF (TABLE) = OFF (UOW) = ON 03/07/2002 13:06:24.316311 ・省略時は全てオフ ・デフォルトで収集される基本情報は 表示されません スナップショット・モニター・スイッチの現行セッションの設定を調べるとき db2 => GET MONITOR SWITCHES モニター記録スイッチ ノード 0 のスイッチ・リスト バッファー・プール活動情報 (BUFFERPOOL) = OFF ロック情報 (LOCK) = OFF ソート情報 (SORT) = OFF SQL ステートメント情報 (STATEMENT) = OFF 表活動情報 (TABLE) = OFF 作業単位情報 (UOW) = OFF Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター・コマンド -UPDATE MONITOR SWITCHESデータベース・モニター記録スイッチをオンまたはオフにします。 UPDATE MONITOR SWITCHES .------------------------. V │ >>-UPDATE MONITOR SWITCHES USING-------switch-name--+-ON--+--+--> '-OFF-' 例: update monitor switches using bufferpool on コマンド・パラメーター USING switch-name 以下のスイッチ名が使用できます。 BUFFERPOOL バッファー・プール活動情報 LOCK ロック情報 SORT ソート情報 STATEMENT SQL ステートメント情報 TABLE 表活動情報 データベース・マネージャー構成パラメータの変更には以下のコマンドを使用します。 UPDATE DBM CFG USING DFT_MON_xxxx ON/OFF xxxxには以下の値が入ります BUFPOOL LOCK STMT TABLE UOW Systems Solution & Web Server Competence Center No.1 DM Group 13-14 スナップショット・モニター・コマンド -RESET MONITORモニターのカウンターをゼロにリセットします。 RESET MONITOR >>-RESET MONITOR---+-ALL----------------------------------+-----> '-FOR---+-DATABASE-+---database-alias--' '-DB-------' 例 reset monitor all コマンド・パラメーター ALL このオプションは、すべてのデータベースについて内部カウンターをリセットするよう指示します。 FOR DATABASE database-alias このオプションは、別名 database-alias をもつデータベースの内部カウンターだけをリセットするよう指示します。 ※各セッションはモニター・データの個別のコピーを持っているので、コマンドを発行したセッションのカウンターのみリセットされま す Systems Solution & Web Server Competence Center No.1 DM Group ブランク・ページ Systems Solution & Web Server Competence Center No.1 DM Group 15-16 スナップショット・モニター・コマンド -GET SNAPSHOT FOR指定したレベルにおけるデータベースの活動状態を取得します。 GET SNAPSHOT FOR >>-GET SNAPSHOT FOR---------------------------------------------> >-----+-+-DATABASE MANAGER-+---------------------------------------+> │ +-DB MANAGER-------+ │ │ '-DBM--------------' │ +-ALL---DATABASES--------------------------------------------+ +-ALL---APPLICATIONS-----------------------------------------+ +-ALL BUFFERPOOLS--------------------------------------------+ +-+-----+--APPLICATION----+-APPLID--appl-id-------+----------+ │ '-DCS-' '-AGENTID--appl-handle--' │ '--+-ALL-----------------------------+---ON--database-alias--' +----------+-DATABASE-+-----------+ │ '-DB-------' │ +----------APPLICATIONS-----------+ +-TABLES--------------------------+ +-TABLESPACES---------------------+ +-LOCKS---------------------------+ '-BUFFERPOOLS---------------------' 特定の活動中のアプリケーションを 表示したいときに使用できます。 applid、appl handleはlist applications コマンドにて確認できます。 例 get snapshot for database on sample get snapshot for tables on sample Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター・コマンド -GET SNAPSHOT FORコマンド・パラメーター DATABASE MANAGER 活動状態のデータベース・マネージャー・インスタンスの統計を提供します。 ALL DATABASES 現行のノード上にあるすべての活動状態のデータベースに関する、一般的な統計を提供します。 ALL APPLICATIONS 現行のノード上にあるデータベースに接続された、活動状態のすべてのアプリケーションに関する情報を提供します。 ALL BUFFERPOOLS 活動状態のすべてのデータベースのバッファープール活動に関する情報を提供します。 ALL ON database-alias 指定したデータベースのすべてのアプリケーション、表、表スペース、バッファー・プール、およびロックに関する一般的な統計およ び情報を提供します。 DATABASE ON database-alias 指定したデータベースの一般的な統計を提供します。 APPLICATIONS ON database-alias 指定したデータベースに接続されているすべてのアプリケーションに関する情報を提供します。 TABLES ON database-alias 指定したデータベース内の表に関する情報を提供します。 これは、TABLE 記録スイッチがオンになった以降にアクセスされた表 のみを含みます。 TABLESPACES ON database-alias 指定したデータベースの表スペースに関する情報を提供します。 LOCKS ON database-alias 指定したデータベースに接続されている各アプリケーションが保持している、すべてのロックに関する情報を提供します。 BUFFERPOOLS ON database-alias 指定したデータベースのバッファープール活動に関する情報を提供します。 Systems Solution & Web Server Competence Center No.1 DM Group 17-18 スナップショット・モニター取得手順 -コマンド- アプリケーション DB2 CLP c:¥sqllib > db2 get monitor switches ・・・・・ c:¥sqllib > db2 update monitor switches using table on c:¥sqllib > db2 update monitor switches using bufferpool on c:¥sqllib > db2 reset monitor all ③モニターをリセットする ①モニターの活動状況を確認する ②モニタースイッチをオンにする ④アプリケーションを実行する 注:このとき、コマンドウィンドウを閉じない。 c:¥sqllib > db2 get snapshot for database on sample >sample_snap.txt ⑤スナップショットを取得する c:¥sqllib > db2 get snapshot for application on sample >>sample_snap.txt Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニターの取得手順 -コマンド手順 1. モニター・ スイッチの活動状況を確認する 2. 取得する情報のモニター・スイッチをオンにする 必要とする情報に対応するモニター・ スイッチをONにします。 モニターがONの状態ではシステムに多少負荷がかかります。 注) ウィンドウを閉じると、モニタースイッチはOFFになります。 3. モニター情報をリセットする スナップショットを取得する直前で、モニター情報をリセットします。 注)スナップショットの保持している数値が0にリセットされますが、モニタースイッチはリセットされません。 4. アプリケーションを実行する データベースへのアクセスを実行します。 アプリケーション中の特定の作業を見る場合には、その作業を行う直前で、モニター情報をリセットします。 5. スナップショットを取得する スナップショットを取得します。 スナップショット情報は取得してもリセットされません。必要に応じてモニター情報をリセットします。 Systems Solution & Web Server Competence Center No.1 DM Group 19-20 スナップショット・モニターの取得手順 -コントロール・センター”モニター活動の表示” モニター・ウィンドウが表示され、 以下のモニターが開始される ・バッファー・プール ・ロック ・ソート ユーザー定義モニターの作成 オブジェクトのシステムを 右クリックし ”モニターのリスト”を選択する ”デフォルト・モニターの開始” 以下のモニターが開始される ・バッファー・プール ・ロック ・ソート ”モニターの開始” 定義済のモニター一覧が表示され るので開始したいモニターを選択 する ・ IBM提供のモニターとユーザー定 義モニターが表示される ”モニターの停止” コントロール・センターから 開始したモニターが停止 する Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニターの取得手順 -コントロール・センターコントロール・センターからスナップショットを開 始した場合は、左記のようなウィンドウで結果 を確認することができるので、システムの稼働 状況の監視画面として利用できます。 ・出力項目を選択することができるので、 ユーザーのニーズにあった監視ウィンド ウを用意することができます。 ・閾値を設定し、その値を越えた場合の アクションを指定できます。 −アラート・センターへの追加 −ビープ音 −コマンドの実行 −ユーザー・メッセージの出力 ・自動更新ができます。 ( 10秒毎から4時間毎) ・グラフ表示も可能です。 ・コマンド出力にはないバッファーヒット率 も項目として提供しています。 ・出力結果をファイルに保存することは できません。 Systems Solution & Web Server Competence Center No.1 DM Group 21-22 スナップショット・モニター情報の見方 1 スナップショット情報は、取得したスナップショットによって内容や詳細レベルが異なります。 パフォーマンスなどのトラブル時に、問題点がどこにあるかを分析するためにスナップショット・ モニターを利用します。 このような場合には、まずDATABASE スナップショットを取得し、次の4つの点に注目し大まかな切り分けを行います。 ロック情報 バッファープール情報 アプリケーション稼動状況 キャッシュ情報 です。 それぞれ、次のようなことが確認できます。 1. ロック情報 データベースに発生しているロックの状況を見ることができます。 想定していたよりもロックが多く発生している場合は、アプリケーションのロジックに問題があることが想像されます。 アプリケーションごとにスナップショット取得すれば、どのアプリケーションがロックを起こしているかがわかります。 2. バッファープール情報 バッファープールのサイズが適正かどうか、索引が正しく使用されているかどうかを確認することができます。 場合によって、バッファープールの大きさを大きくしたり、索引を考慮したりします。 3. アプリケーション稼動状況 アプリケーションから発行されるSQLやシステムが発行するSQLをまとめて確認することができます。 アプリケーションが想定したようにデータベースをアクセスしているかがわかります。想定したよりも、データにアクセスする回数 が少ない場合や、Rollbackが大量に発生している場合には、アプリケーションに問題があることが想像されます。 4. キャッシュ情報 パッケージキャッシュやカタログキャッシュのサイズが適正かどうか確認できます。 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター情報の見方 2 ここでは、スナップショット情報の基本的な見方を解説します。 次ページ以降にあるのは、 > > > > db2 db2 db2 db2 update monitor swtiches using sort on update monitor switches using lock on update monitor switches using bufferpool on reset monitor all reset monitor と、get snapshot の間に、稼動状況を確 認したいアプリケーションを実行する。 > db2 get snapshot for database on sample と実行したときの一例です。 モニタースイッチは全てを on にする必要はありませんが、on にしなかった情報はスナップショット情報で[取得されませんでした]もしく は[not collected]となります。 特に注目すべき項目が強調してあります。 ※ それぞれのモニタースイッチをONにすると、モニター・ヒープサイズ(mon_heap_sz)を使用します。従ってモニター・ヒープサイズ が小さいとエラー( SQLCODE -973) になる場合があります。その場合には、モニター・ヒープサイズを大きくするか、 不要なモニタースイッチをOFFにしてください。 モニター・ヒープに必要なページの概数を求める式 (モニター・アプリケーション数 + 1) * (データベースの数 * (800 + (アクセスされた表の数 * 20) + ((接続されたアプリケーションの数 + 1) * (600 + (表スペースの数 * 100))))) + (((イベント・モニター・バッファー・サイズの合計) * 4096) * 2) Systems Solution & Web Server Competence Center No.1 DM Group 23-24 スナップショット・モニター情報の例 データベース・スナップショット データベース名 データベース・パス 入力データベース別名 データベース状況 ・・・・・ スナップショット・タイム・スタンプ ・・・・・ ロック保留 ロック待機 ロック上で待機される時間データベース (ms) 使用中のロック・リスト・メモリー (バイト) デッドロック検出 ロック・エスカレーション 排他ロック・エスカレーション ロック上で待機中のエージェント ロック・タイムアウト ・・・・・ バッファー・プール・データ論理読み取り バッファー・プール・データ物理読み取り 非同期プール・データ・ページ読み取り バッファー・プール・データ書き込み 非同期プール・データ・ページ書き込み バッファー・プール索引論理読み取り バッファー・プール索引物理読み取り 非同期プール索引ページ読み取り バッファー・プール索引書き込み 非同期プール索引ページ書き込み バッファー・プール読み取り時間の合計 (ms) バッファー・プール書き込み時間の合計 (ms) 非同期読み取り合計経過時間 非同期書き込み合計経過時間 = = = = SAMPLE C:¥DB2¥NODE0000¥SQL00003¥ SAMPLE Active = 03/14/2002 15:56:49.785786 } } = = = = 0 0 * 0 * 2196 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = = = = = = = 0 0 0 0 0 0 0 ①ロック情報 = 4 = 0 ** ** ** = 0 = 0 ** ** ** ** ** ** ** ** ** ** ** ②バッファープール情報 *:ロック・モニターをオンにしないと 収集されない項目 **:バッファープール・モニターをオンに しないと収集されない項目 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター情報の例 ・・・・・ コミット・ステートメント試行 ロールバック・ステートメント試行 動的ステートメント試行 静的ステートメント試行 失敗したステートメント操作 Select SQL ステートメント実行 Update/Insert/Delete ステートメント実行 DDL ステートメント実行 内部自動再バインド 内部行削除 内部挿入行 内部行更新 内部コミット 内部ロールバック デッドロックによる内部ロールバック 削除行数 挿入行数 更新行数 選択行数 読み取り行数 バインド/事前コンパイル試行 ・・・・・ パッケージ・キャッシュ検索 パッケージ・キャッシュ挿入 パッケージ・キャッシュ・オーバーフロー パッケージ・キャッシュ最高水準点 (バイト) アプリケーション・セクション検索 アプリケーション・セクション挿入 カタログ・キャッシュ検索 カタログ・キャッシュ挿入 カタログ・キャッシュ・オーバーフロー カタログ・キャッシュ・ヒープ・フル = 14 = 1 = 38 = 15 = = = = 1 7 0 0 = = = = = 0 0 0 0 7 } } } ③アプリケーション稼動状況 = 4 = 0 = 0 = 0 = 0 = 134 = 169 = 0 = 8 = 7 = = = = 0 190787 38 7 = 8 = 3 = 0 = 0 Systems Solution & Web Server Competence Center No.1 DM Group 25-26 ④キャッシュ情報 スナップショット・モニター情報の例 - 解説1 ①ロック情報 モニター期間中のデータベースのロックに関する情報の概略です。 get snapshot for locks on xxx コマンドでスナップショット情報を取得する方法もあります。 不用意なロックや、ロックエスカーレーション、デッドロックが頻繁に起こっているようだと、ロジックを見直す必要があります。 commit コマンドの発行し忘れがないかなどを確認してください。 デッドロックの検出(Deadlocks detected) デッドロックが発生した回数です。 この数値が大きい場合にはアプリケーションのロジック変更によるデッドロック回避が必要です。 ロック・エスカレーション(Lock escalations) 排他ロック・ エスカレーション(Exclusive lock escalations) ロックエスカレーションが発生した回数です。 ロックエスカレーションは、多くの行ロックが発生した場合に、DB2 UDB が行ロックから排他ロックや表ロックへ、ロックレベルが変更 することを言います。これは、行ロックが大量に発生したときにデータベース構成パラメータに応じて発生しますので、ロックリストを大 きくするか、deadlock と同じく、アプリケーションのロジック変更が必要です。なおロックリストを大きくしても、根本的な解決ではありま せん。 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット・モニター情報の例 - 解説2 ②バッファープール情報 バッファープールの状況に関する情報の概略です。 (get snapshot for locks on bufferpools コマンドでスナップショット情報を取得する方法もあります。) データベースはバッファープール(メモリ)経由でしかデータをアクセスできません。。 従って、バッファープールにキャッシュされていない場合は、一度ディスクから読み込み、バッファープールに読み込む時間が余分 に発生することになります。 また、バッファープールに空きスペースがない場合には、使用度の低いデータの物理ディスクへの書き込みが発生するなど、パ フォーマンスに多くの影響を及ぼす場合があります。 バッファープールヒット率が悪い場合にはバッファープールを大きくするなどの設定値を変更してみてください。 ただし、通常はデータの追加や更新が行われるためバッファーヒット率は 100% にはなりません。 一般的には90%以上を目標とします。 バッファー・プール・データ論理読み取り、バッファー・プール索引論理読み取り (Buffer pool data logical reads、Buffer pool index logical reads) バッファープールから、データや索引を読み込んだ回数です バッファー・プール・データ物理読み取り、バッファー・プール索引物理読み取り (Buffer pool data physical reads、Buffer pool index physical reads) ディスクI/Oを伴う、バッファープールの読み込み回数です。 データのバッファーヒット率 (1-(バッファー・ プール・ データ物理読み取り/バッファー・プール・データ論理読み取り)) * 100 (%) 索引のバッファーヒット率 (1-(バッファー・ プール索引物理読み取り/バッファー・プール索引論理読み取り)) * 100 (%) バッファープール全体のバッファーヒット率 (1-(バッファー・ プール・ データ物理読み取り+バッファー・プール索引物理読み取り /(バッファー・プール・データ論理読み取り+バッファー・プール索引論理読み取り)) * 100 (%) Systems Solution & Web Server Competence Center No.1 DM Group 27-28 スナップショット情報の例 - 解説3 ③アプリケーション稼動状況 アプリケーションのデータベースに関するアクセス状況を見ることができます。 この項目を確認すれば、スナップショット取得期間中のSQLの大体の処理数を把握することができます。 コミット・ステートメント試行 コミット文の発行回数 ロールバック・ステートメント試行 ロールバック文の発行回数 動的ステートメント試行、静的ステートメント試行 動的/静的SQL文の発行回数 Select SQL ステートメント実行、Update/Insert/Delete ステートメント実行 select/update/insert/delete SQL文の発行回数です。 これらの項目で、アプリケーションが発行したSQL文の数が把握できますので、アプリケーションが 無限ループなどがなく、正しく構築されているかどうかが確認できます。 内部ロールバック/デッドロックによる内部ロールバック システムが自動的に行ったロールバックやデッドロックによってロールバックされた数 これらの項目が多い場合には、アプリケーションに問題がありロールバックが発行されている可能性があります。 削除行数、挿入行数、更新行数、読み取り行数 select/update/insert/delete された回数です。 これらの項目で、SQLで処理された行数を把握することができるため、想定していた処理量が実行されているかを確認できます。処理 量が大幅に想定していた数字と異なる場合には、SQLの間違いや、データに問題があることが想像されます。 注)アプリケーション稼動状況で取得される情報には、インデックスなどを読み込んだ情報を含んでいますので、純粋にユーザーアプリ ケーションで処理した行数よりは多くカウントされます。 Systems Solution & Web Server Competence Center No.1 DM Group スナップショット情報の例 - 解説4 ④キャッシュ情報 カタログキャッシュや、パッケージキャッシュは静的SQLのコンパイル時や、動的SQLのSQL処理時に参照されます。 特に動的SQLの場合は、SQLのコンパイルがSQL処理時に行われるので、カタログキャッシュやパッケージキャッシュが小さいと、SQL を処理するごとにコンパイル時間が必要となり、パフォーマンスに悪影響を及ぼします。 カタログ、パッケージどちらのヒット率も80%を一つの目安として、SQLを見直しなるべく同じようなステートメントになるように変更する か、カタログ、パッケージのキャッシュサイズを大きくとることを検討してください。 カタログ・キャッシュ検索、パッケージ・キャッシュ検索 カタログ、パッケージキャッシュが参照された回数です。 カタログ・キャッシュ挿入、パッケージ・キャッシュ挿入 カタログ、パッケージキャッシュへ追加しようとした回数です。 カタログキャッシュ ヒット率 (1-(カタログ・ キャッシュ挿入/カタログ・キャッシュ検索)) * 100 (%) パッケージキャッシュ ヒット率 (1-(パッケージ・ キャッシュ挿入/パッケージ・ キャッシュ検索)) * 100 (%) Systems Solution & Web Server Competence Center No.1 DM Group 29-30 参考:アプリケーション・スナップショット出力例 アプリケーション・スナップショットのサンプルです。 ( 掲載済でない主な項目のみを掲載しています。) ( 全てのモニター・スイッチをオンにしています。) DB2 for OS/390 V7がクライアントとなっている活動中のアプリケーション です。(①) SELECT * FROM DSNX.EMPPROJACTを実行しようとしていますが、 EMPPROJACTテーブルのロック待ちとなっていることがわかります。(②) インバウンド通信アドレス データベース名 = SAMPLE データベース・パス = C:¥DB2¥NODE0000¥SQL00003¥ クライアント・データベース別名 = SAMPLE 入力データベース別名 = SAMPLE 最後のリセット・タイム・スタンプ = スナップショット・タイム・スタンプ = 03/26/2002 10:19:53.104460 認可された最高権限レベル = 直接 DBADM 権限 直接 BINDADD 権限 ・ ・ ・ アプリケーション・スナップショット アプリケーション・ハンドル アプリケーション状況 状況変更時刻 アプリケーション・コード・ページ アプリケーション国別コード DUOW 相関トークン アプリケーション名 アプリケーション ID TP モニター・クライアント・ユーザー ID ・・・ = 24 = ロック待機 = 03/26/2002 10:19:26.715210 =0 =0 = 09746114.0B04.020326011927 = HORIBE .BATCH = 09746114.0B04.020326011927 = ② シーケンス番号 = 0001 接続要求開始タイム・スタンプ = 03/26/2002 10:19:26.689144 接続要求完了タイム・スタンプ = 03/26/2002 10:19:26.692060 アプリケーション・アイドル時間 = 許可 ID = DB2ADMIN クライアント・ログイン ID = DB2ADMIN クライアント構成名 = MP3K2DBX クライアント・データベース・マネージャー製品 ID = DSN07010 クライアント・アプリケーションの処理 ID =0 クライアント・アプリケーションのプラットフォーム = DRDA 経由 MVS クライアントの通信プロトコル = APPC = 9.116.21.97 2820 アプリケーションで保留されたロック =3 接続からのロック待機 =2 ロック上で待機している時間アプリケーション (ms) デッドロック検出 =0 ロック・エスカレーション =0 排他ロック・エスカレーション =0 接続後のロック・タイムアウト数 =0 ロック上で待機している合計時間 UOW (ms) ソートの合計 ソート時間の合計 (ms) 合計ソート・オーバーフロー = 26389 = 26389 =0 =0 =0 バッファープール関連情報 ・・・ DML操作関連情報 ・・・ キャッシュ関連情報 ・・・ ① Systems Solution & Web Server Competence Center No.1 DM Group 参考:アプリケーション・スナップショット出力例 最新の操作 = Fetch カーソル名 = C1 最新の操作開始タイム・スタンプ = 03/26/2002 10:19:26.707265 最新の操作停止タイム・スタンプ = アプリケーションに関連したエージェント =1 ・・・ ステートメント・タイプ = Dynamic SQL Statement ステートメント = Fetch セクション数 =1 アプリケーション作成者 = DB2ADMIN パッケージ名 = DSNESM68 カーソル名 = C1 ステートメント・ノード番号 =0 ステートメント開始タイム・スタンプ = 03/26/2002 10:19:26.707265 ステートメント停止タイム・スタンプ = 最後に完了した stmt の経過時間 (sec.ms) = 0.000087 合計ユーザー CPU 時間 = 0.000000 合計システム CPU 時間 = 0.000000 タイマーオン時の SQL コンパイラー・コスト見積もり = 15 SQL コンパイラー・カーディナリティー見積もり = 94 要求された並行処理の度合い = 1 ステートメント上で作動しているエージェント数 =1 ステートメント用に作成されたサブエージェントの数 =1 ステートメント・ソート =0 合計ソート時間 =0 ソート・オーバーフロー =0 読み取り行数 =0 書き込み行数 =0 削除行数 =0 更新行数 =0 挿入行数 =0 フェッチ行数 =0 ブロック・カーソル = NO ② 動的 SQL ステートメント・テキスト : SELECT * FROM DSNX.EMPPROJACT エージェント処理/スレッド ID = 2080 ロック待ちのサブセクション =0 ロック保留中エージェント ID = 23 ロック保留中のアプリケーション ID = 09746114.0A04.020326011911 ロック待機が行われたノード =0 ロック・オブジェクト・タイプ =表 ロック・モード = Share with Intention Exclusive Lock (SIX) 要求ロック・モード = Share Lock (S) ロック保留中の表スペース名 = TSTBTEST1 ロック保留中の表スキーマ = DSNX ロック保留中の表名 = EMPPROJACT ロック待機開始タイム・スタンプ = 03/26/2002 10:19:26.715212 エスカレーション結果のロック = NO アプリケーション・ハンドル:23 アプリケーション・ハンドル:24 UPDATE DSNX.EMPPROJACT SET PROJNO = 'AD3112' WHERE PROJNO = 'AD2113' ; SELECT * FROM DSNX.EMPPROJACT ロック待ち COMMIT待ち DSNX. EMPPROJACT Systems Solution & Web Server Competence Center No.1 DM Group 31-32 参考:データベース・ロック・スナップショット出力例 データベース・ロック・スナップショットのサンプルです。 左がアプリケーション・スナップショット例のアプリケーションです。 (アプリケーション・ハンドル:24) 右が、ロックを保持している側のアプリケーションです(アプリケーション・ ハンドル:23)。コミットが出ていないので、ロックを保持している状態です。 データベース・ロック・スナップショット アプリケーション・ハンドル アプリケーション ID シーケンス番号 アプリケーション名 許可 ID アプリケーション状況 状況変更時刻 アプリケーション・コード・ページ 保留ロック 合計待ち時間 (ms) = 24 = 09746114.0B04.020326011927 = 0001 = HORIBE .BATCH = DB2ADMIN = ロック待機 = 03/26/2002 10:19:26.715210 =0 =2 = 38514 ロックのリスト ロック・オブジェクト名 ノード番号ロックの保留場所 オブジェクト・タイプ 表スペース名 表スキーマ 表名 モード 状況 ロック・エスカレーション ロック待ちのサブセクション =0 ロック保留中エージェント ID = 23 ロック保留中のアプリケーション ID = 09746114.0A04.020326011911 ロック待機が行われたノード =0 ロック・オブジェクト・タイプ =表 ロック・モード = Share with Intention Exclusive Lock (SIX) 要求ロック・モード = Share Lock (S) ロック保留中の表スペース名 = TSTBTEST1 ロック保留中の表スキーマ = DSNX ロック保留中の表名 = EMPPROJACT ロック待機開始タイム・スタンプ = 03/26/2002 10:19:26.715212 エスカレーション結果のロック = NO ロックのリスト ロック・オブジェクト名 ノード番号ロックの保留場所 ・・・ アプリケーション・ハンドル アプリケーション ID シーケンス番号 アプリケーション名 許可 ID アプリケーション状況 状況変更時刻 アプリケーション・コード・ページ 保留ロック 合計待ち時間 (ms) ロック・オブジェクト名 ・・・ ロック・オブジェクト名 ノード番号ロックの保留場所 オブジェクト・タイプ 表スペース名 表スキーマ 表名 モード 状況 ロック・エスカレーション ・・・ =0 =0 Systems Solution & Web Server Competence Center No.1 DM Group 33-34 = 23 = 09746114.0A04.02032601191 = 0001 = SYSADM .BATCH = DB2ADMIN = UOW 待機中 = 03/26/2002 10:19:10.513966 =0 = 13 =0 = 32790 =0 =行 = TSTBTEST1 = DSNX = EMPPROJACT =X = Granted = NO = 32789 =4 =0 =表 = TSTBTEST1 = DSNX = EMPPROJACT = SIX = Granted = NO