club db2 第137回:基礎から再入門!db2モニタリング入門

37
CLUB DB2 137DB2モニタリング入門 CLUB DB2 #137 2012/2/24 日本アイ・ビー・エム 下佐粉 昭 (しもさこ あきら) rev. 1.1 この資料は下記URLでダウンロード可能です http://ibm.com/developerworks/wikis/display/clubdb2/materials

Upload: akira-shimosako

Post on 24-May-2015

17.050 views

Category:

Documents


9 download

DESCRIPTION

2011年2月24日に開催したCLUB DB2 第137回:基礎から再入門!DB2モニタリング入門 の資料です。 その他の資料は下記URLからダウンロード可能です。 http://www.ibm.com/developerworks/wikis/display/clubdb2/materials

TRANSCRIPT

Page 1: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

CLUB DB2 第137回

DB2モニタリング入門

CLUB DB2 #137

2012/2/24

日本アイ・ビー・エム

下佐粉 昭 (しもさこ あきら) rev. 1.1

この資料は下記URLでダウンロード可能ですhttp://ibm.com/developerworks/wikis/display/clubdb2/materials

Page 2: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

2

自己紹介

下佐粉 昭 ( しもさこ あきら )和歌山県生まれ

2001年 IBMに中途入社以来、DB2関連の仕事多し

現在はビジネスパートナー様向け技術支援

■書籍

「即戦力のDB2管理術」

「XML-DB開発 実技コース」(共著)

「DB2 逆引きリファレンス」(共著)

■オンライン

Twitter - @simosako– http://twitter.com/simosako

Unofficial DB2 Blog– http://db2.jugem.cc/

内容は全てWEBで公開しています!

http://db2watch.com/

Page 3: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

3

今日の目的

モニタリングって難しそう?– モニタリングはそれほど難しくありません– 大切なのは定期的にモニタリングし、データを保存しておくこと– データを持っていないと、トラブルが起こった時に大変

【今日の目的】モニタリングが必要な理由と、その簡単な方法を具体的に知る!

【宣伝】基礎から詳しく学習したい方は、ぜひ自著をご参照ください!

即戦力のDB2管理術~仕組みからわかる効率的管理のノウハウ

2011年4月8日発売 (技術評論社)

下佐粉昭 著

A5判/432ページ

ISBN 978-4-7741-4597-6

http://db2.jugem.cc/?eid=2341 (書籍紹介)

Page 4: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

4

目次

モニタリングの考え方

OSレベルでのモニタリング

–基本的なコマンド–OSモニタリングの便利ツール (nmon)–Windowsの便利ツール:「パフォーマンス」

DB2のモニタリング

–スナップショットとメトリックス– DB2の必修モニタリングポイント

–DB2モニタリングの便利ツール (db2top)–簡単な定常監視

まとめ

Page 5: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

①モニタリングの考え方

Page 6: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

6

モニタリングは、なんのため?

モニタリング=データの収集–システム内部のデータを収集すること

• ディスクIO速度、ネットワークエラー率、メモリ使用率 ...

なんのため?–長期的なもの→監視

• 長期的にデータを記録:定常監視

–短期的なもの→パフォーマンス・チューニング• リアルタイムのモニタリング• クエリーを実行しながら「眺める」ことが重要

モニタリングの方法を知ると、一挙両得!

Page 7: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

7

定常監視はなぜ必要?

時間

継続的に記録し続けることで、システムに起こっている変化が把握出来るようになります。

正常な状態のデータはパフォーマンスチューニングにも大変有用です

Page 8: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

8

「層(レイヤー)」を意識する

ハードウェア構成

OSの設定

DB2の設定

DB2の内部状態

•チューニングも監視も、層を意識することが大切です•ある層を変更すると、上の層に影響があります•調査は外堀から

Page 9: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

9

モニタリングのポイント

DB2サーバー

NIC

ネットワーク疎通、エラー率

ストレージ全体の使用率

DB2の表ス

ペースDB2表スペースの

使用率

メモリ

CPU

DB2内部の動

作情報DB2

DB2の診断ログ

OSのログ

DB2関連プロセ

スの死活監視DB2DB2

•バッファープールヒット率•デッドロック数•ソート時間•トランザクション数

CPUやメモリ

使用率

エラー情報

•NIC , CPU使用率 , メモリ使用率, プロセスの死活監視 , ディスク使用量 ← OSコマンド

•DB2内部情報(バッファープール、ソート時間 ...),DB2の表スペース ← DB2のコマンド

エラー情報

Page 10: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

②OSレベルでのモニタリング

Page 11: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

11

OSコマンドでのモニタリング(調査)

CPUの使用状況は?

– Linux/Unix: ps , vmstat– Windows: タスクマネージャ

メモリ状況は?

– Linux/Unix: vmstat , free– Windows : タスクマネージャ

ディスクアクセス,ディスク残量は?

– Linux/Unix: vmstat , iostat , df– Windows: パフォーマンスモニター

ネットワークはどうか?

– ping (生きているか確認)

OSのログを読む(障害発生時は 重要!)

– Linux/Unix : syslog , errpt(AIX) , /var/log/messages など

– Windows: イベントビューア

Page 12: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

12

重要コマンド:vmstat

vmstatは多くのLinux、Unixで利用可能なコマンドで、多彩な内部データを出力できる

vmstatの出力でチェックすべきポイント

– rは待ちプロセス数 :待ちが多い場合は、そもそもCPUパワー不足を疑う

– bはウェイトしている(ブロックされた)プロセス数(I/Oウェイト)

• I/Oウェイトを減らすには、DB2側の改善が必要

– swap in(si)とswap out (so)はゼロ維持が原則

– block-in (bi) ディスクからの読み取り数

• 遅いクエリーを実行したとき、biが増えない?⇒IOウェイト以外の要因

• 遅いクエリー(SELECT)を実行したとき、boが増える?⇒ヒープオーバーフロー

– cpuのusはユーザプロセスの使用率、syはシステムの使用率

• 待ち(r)が少なく、ユーザプロセス(us)が多いのがよくチューニングされた状況

• 巨大なデータアクセスがある場合、システム(sy)が増えるのは自然

vmstat [delay [count]]

db2inst1@ubuntuserver:~$ vmstat 1 100procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa1 0 0 17548 35640 298480 0 0 1664 0 7377 15332 35 19 45 02 0 0 17020 35648 298472 0 0 1408 16 4165 23101 35 22 44 02 0 0 17176 35648 298480 0 0 1916 0 8029 15943 38 16 46 3

Page 13: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

13

でもちょっと面倒...色々なデータを取るには複数のコマンドを並行実行して、 tail -f で複数のログを見て...

⇒ 結構面倒ですね

そこで 終兵器 nmon– もともとはIBM社内の有志開発者が作ったAIX用の便利コマンド。後にLinuxにも移植– あまりに便利なので、AIXではOS標準添付に

どこがいいの?– 軽量(負荷を増やさない)– 簡単(1つキーを押すだけ)– GUI無しの環境でも使える

– 見たい情報がリアルタイムグラフ化– 結果をファイルに記録できる

※nmonの取得方法については参考資料②にURLを記載しています

Page 14: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

14

nmonを使う①リアルタイムで眺める

> nmon で起動後

ショートカットキーで見たいデータを表示

.(ドット)で動きがあるプロセスとディスクのみ表示にする

-/+ で更新頻度を変更可能

c:CPUm:メモリj:ファイルシステムd:ディスクI/Ot:プロセス

Page 15: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

15

nmonを使う② 記録と調査・報告用nmonは-Fを指定すると、CSV形式のファイル記録モードに

-Fでファイル名を指定、-sでデータの取得間隔を指定、 -c で取得回数– 例) >nmon -F mylog.nmon -s 1 -c 30 (※コマンドが非同期で実行されるので注意)

⇒ 1秒間隔で30回データを取得し、mylog.nmonに記録

このcsvファイルを、nmon Analyzer (EXCELマクロ)から読み込むことで ...– 自動的に色々な視点からグラフ化してくれる

CPU使用率の時間経過ディスク毎のスループットディスクIO量の時間経過

※nmon Analuzerの取得方法については参考資料②にURLを記載しています

Page 16: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

16

Windows環境ではパフォーマンスモニターが便利– OS標準機能で、OSの情報とDB2内部情報を一括して取得可能

• 低負荷・リモートから取得可能

– グラフを右クリック⇒カウンタの追加

• DB2 Databases(DBレベルの情報)

ロックウェイト、ソートオーバーフロー 等多数

• DB2 Applications (アプリケーションレベルの情報)

• DB2 Database Manager(インスタンスレベルの情報)

DBが活性化(Activate)されていないと表示されません

インスタンスが開始(db2start)していないと表示されません

ローカル、もしくはリモートのコンピュータからカウンタデータを収集できます

Page 17: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

③DB2のモニタリング

Page 18: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

18

OSコマンドで得られない情報とは?

OSコマンドでは取得できない大切な情報は多数存在する

– メモリ全体の使用量はOSコマンドで分かるが、DB2の各

種ヒープやバッファーの量が足りているかどうかはDB2にしか分からない

– ディスク全体の使用量はOSコマンドで分かるが、表ス

ペースの利用率はDB2にしか分からない

DB2の状態は常に変化している

– そのため「今」の状況を把握して対応する必要がある

DB2の「今」が分かる情報があると...– パフォーマンスチューニング用

• クエリー実行中の状態をモニタリング

– 監視用

• 「今」の状態を定期的に記録することで、異常事態が

判別できるようになる

Page 19: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

19

DB2のモニタリング機能

モニターエレメント(監視項目)

GET SNAPSHOTコマンド

(テキスト出力)

スナップショット表関数

モニター表関数(MON_*で始ま

る表関数)

モニタービュー(MON_*から始まる

ビュー。モニター表関数を組み合わせて作られている)

スナップショット

モニター表関数・ビュー(メトリック)※v9.7以降

スナップショット管理ビュー(スナップショット表関数を組み合わせて作られている)

MONREPORTモジュール

(テキスト出力)

DB2には「モニタ-エレメント」という監視項目があり、それをメトリック(モニター表関数)か、スナップショット(SNAPSHOTコマンド)で取り出すようになっている

Page 20: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

20

モニターエレメント

モニターエレメントの説明

対応しているモニター表関数の一覧とグループ(省略しています)

対応しているスナップショットモニターの論理グループ

※モニターエレメント一覧http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.mon.doc/doc/r0001140.html

モニターエレメントからは豊富なDB2内部情報が得られます例) バッファープールへのアクセス数、ソートの回数、表の読み書き数...

Page 21: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

21

メトリック(モニター表関数)とは

DB2 9.7から追加された新しいモニタリングの仕組み。デフォルトで有効になっています

データオブジェクトレベルの便利なビューや表関数

– MON_GET_BUFFERPOOL : バッファープールヒット率など

– MON_GET_TABLE : 表スキャンの数など

– MON_GET_INDEX :インデックススキャンの数など

ユーザのクエリーと、システム内部のクエリーを分けてデータを取得可能

システム レベル

MON_GET_SERVICE_SUBCLASS

MON_GET_WORKLOAD

MON_GET_CONNECTION

MON_GET_UNIT_OF_WORK

パッケージ・キャッシュ・ステートメント レベルMON_GET_PKG_CACHE_STMT

アクティビティー レベル

MON_GET_ACTIVITY_DETAILS

データ・オブジェクト レベル

MON_GET_TABLE MON_GET_INDEX MON_GET_BUFFERPOOL MON_GET_TABLESPACE MON_GET_CONTAINER MON_GET_EXTENT_MOVEMENT_STATUS

Page 22: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

22

モニター表関数の使い方

表関数とは、「表を返す」関数– 結果として表を返すので、FROMの後ろに置いて使う– 表である事を示すために、TABLE()で囲む必要がある– 例) SELECT * FROM TABLE(MON_GET_TABLE('DB2INST1','',-2)) AS T

• でも、すごく列が多いので、列を指定して絞らないと、超横長の結果が...

そこで... db2perf_browseを利用– 2011年5月の"DB2 chat with the lab"で説明された便利ツール

• 列と行を入れ替えて表示するストアドプロシージャ

例)> call db2perf_browse('MON_GET_BUFFERPOOL(''IBMDEFAULTBP'',null)')> call db2perf_browse('MON_GET_TABLE(''DB2INST1'',null,-2)')

Page 23: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

23

DB2の必修モニタリングポイント① バッファープールのヒット率

バッファープール(BP)は、データのキャッシュ領域

– データベースで も遅いパーツは「ディスク」– キャッシュはあるがサイズに限度がある→BP ヒット率向上はパフォーマンス向上の鍵

BPヒット率=バッファープールを読み書きした数/全体のIOリクエストの数 * 100 [%]

エレメントで計算するには以下の2つを使用して..– POOL_DATA_L_READS : 論理読み取り数– POOL_DATA_P_READS : 物理読み取り数

コンテナ コンテナ

表スペース

IOサーバー

エージェント

ページ・クリーナー

SELECT 100.0*(POOL_DATA_L_READS - POOL_DATA_P_READS) / POOL_DATA_L_READS FROM TABLE (MON_GET_BUFFERPOOL('IBMDEFAULTBP',null)) AS T

もしくは、専用のビューを使用(※こちらはスナップショットデータなので注意)

SELECT BP_NAME,DATA_HIT_RATIO_PERCENT,INDEX_HIT_RATIO_PERCENT FROM SYSIBMADM.BP_HITRATIO

Page 24: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

24

DB2の必修モニタリングポイント② トランザクション数

トランザクション数(定期時間内のトランザクションの数)を把握しておく事は重要です– Transactions Per Minute (TPM)– (狭義の)トランザクション≒コミット発行数+ロールバック発行数

エレメントで計算するには、以下の2つを組み合わせて...– TOTAL_APP_COMMITS: 総COMMIT数– TOTAL_APP_ROLLBACKS:総ROLLBACK数

上記にはDB2システムが内部で発行したSQLの分も含まれる– ユーザSQLのみをカウントしたい場合は、以下のようにMON_GET_SERVICE_SUBCLASS

でスーパークラスに'SYSDEFAULTUSERCLASS'を指定してデータを取り出す

SELECT CURRENT TIMESTAMP,TOTAL_APP_COMMITS+TOTAL_APP_ROLLBACKS FROM SYSIBMADM.MON_DB_SUMMARY

SELECT CURRENT TIMESTAMP,TOTAL_APP_COMMITS FROM TABLE(MON_GET_SERVICE_SUBCLASS('SYSDEFAULTUSERCLASS','',-2)) AS T

MON_DB_SUMMARYは良く使う情報がまとめられた便利なビュー

Page 25: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

25

DB2の必修モニタリングポイント③ 遅いクエリーの発見

パフォーマンスチューニングでは、遅いクエリーに対してチューニングする事が重要– 一番良いのは、クライアントアプリケーション側でSQLを管理していること– 無いなら、パッケージキャッシュから(実行されたSQLを一次的にキャッシュしておく領域)

エレメントで計算するには、– STMT_EXEC_TIME:クエリーを実行した時間– EXECUTABLEID:SQL毎に付けられるID(ハッシュ値)

をベースに検索• 以下の例は、同じクエリーの実行時間をSUMで足して、遅いもの順でトップ10を出力した例

• EXECUTABLEIDではSQLが分からないので、以下のようにして情報を出力

EXECUTABLEIDを第二引数に指定。(xを付けるのをお忘れ無く)

SELECTSUM(STMT_EXEC_TIME) AS TOTAL_EXEC_TIME,SUM(TOTAL_ACT_WAIT_TIME) AS TOTAL_WAIT_TIME,EXECUTABLE_ID

FROM TABLE(MON_GET_PKG_CACHE_STMT(NULL, NULL, NULL, -2)) AS T GROUP BY EXECUTABLE_IDORDER BY TOTAL_EXEC_TIME DESCFETCH FIRST 10 ROWS ONLY

call db2perf_browse('MON_GET_PKG_CACHE_STMT(NULL,x''0100000000000000840000000000000000000000020020120223161303238342'',NULL,-2)');

Page 26: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

26

(参考)前ページの実行例call db2perf_browse('MON_GET_PKG_CACHE_STMT(NULL,x''0100000000000000840000000000000000000000020020120223161303238342'',NULL,-2)')

結果セット 1--------------

COL VALUE-------------------------------- -------------------------------MEMBER 0SECTION_TYPE DINSERT_TIMESTAMP 2012-02-23-16.13.03.238338

(中略)TOTAL_ACT_WAIT_TIME 305TOTAL_CPU_TIME 1085POOL_READ_TIME 305POOL_WRITE_TIME 0DIRECT_READ_TIME 0DIRECT_WRITE_TIME 0LOCK_WAIT_TIME 0TOTAL_SECTION_SORT_TIME 0TOTAL_SECTION_SORT_PROC_TIME 0TOTAL_SECTION_SORTS 0LOCK_ESCALS 0LOCK_WAITS 0ROWS_MODIFIED 0ROWS_READ 35ROWS_RETURNED 35DIRECT_READS 0DIRECT_READ_REQS 0DIRECT_WRITES 0DIRECT_WRITE_REQS 0POOL_DATA_L_READS 36POOL_TEMP_DATA_L_READS 0POOL_XDA_L_READS 0POOL_TEMP_XDA_L_READS 0POOL_INDEX_L_READS 24POOL_TEMP_INDEX_L_READS 0POOL_DATA_P_READS 2POOL_TEMP_DATA_P_READS 0POOL_XDA_P_READS 0POOL_TEMP_XDA_P_READS 0POOL_INDEX_P_READS 4POOL_TEMP_INDEX_P_READS 0POOL_DATA_WRITES 0POOL_XDA_WRITES 0POOL_INDEX_WRITES 0

TOTAL_SORTS 0POST_THRESHOLD_SORTS 0POST_SHRTHRESHOLD_SORTS 0SORT_OVERFLOWS 0WLM_QUEUE_TIME_TOTAL 0WLM_QUEUE_ASSIGNMENTS_TOTAL 0DEADLOCKS 0

(中略)LOCK_TIMEOUTS 0LOG_BUFFER_WAIT_TIME 0NUM_LOG_BUFFER_FULL 0LOG_DISK_WAIT_TIME 0LOG_DISK_WAITS_TOTAL 0LAST_METRICS_UPDATE 2012-02-23-16.43.02.557624NUM_COORD_EXEC 7NUM_COORD_EXEC_WITH_METRICS 7VALID YTOTAL_ROUTINE_TIME 0TOTAL_ROUTINE_INVOCATIONS 0ROUTINE_ID 0STMT_TYPE_ID DML, Select (blockable)QUERY_COST_ESTIMATE 23STMT_PKG_CACHE_ID 704374636548COORD_STMT_EXEC_TIME 313STMT_EXEC_TIME 313TOTAL_SECTION_TIME 313TOTAL_SECTION_PROC_TIME 8TOTAL_ROUTINE_NON_SECT_TIME 0TOTAL_ROUTINE_NON_SECT_PROC_TIME 0STMT_TEXT SELECT COLNAME, TYPENAME FROM SYSCAT.COLUMNS WHERE

TABNAME='POLICY' AND TABSCHECOMP_ENV_DESC <BLOB>ADDITIONAL_DETAILS <BLOB>-------------------- ----------------------------------------

85 レコードが選択されました。

リターン状況 = 0

Page 27: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

27

DB2の必修モニタリングポイント④ メモリ使用量、ディスク使用量

メモリ– 全体をざっくり知るには、db2mtrkコマンド(メモリートラッカー)が便利

ディスク– エレメントとしては、TBSP_TOTAL_PAGES(確保しているページ数TBSP_USABLE_PAGES

(空きページ数)を使って計算しても良いが、db2pdコマンドが便利

> db2pd -db EMPLOYEE -tablespaces

db2inst1@ubuntuserver:~$ db2mtrk -dMemory for database: EMPLOYEE

utilh pckcacheh other catcacheh bph (1) bph (S32K)64.0K 1.6M 192.0K 512.0K 4.6M 832.0Kbph (S16K) bph (S8K) bph (S4K) shsorth lockh dbh576.0K 448.0K 384.0K 128.0K 16.9M 18.9Mapph (64) apph (45) apph (14) apph (13) apph (12) apph (11)64.0K 192.0K 64.0K 64.0K 64.0K 192.0Kapph (10) apph (9) apph (8) appshrh64.0K 64.0K 64.0K 1.4M

Page 28: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

28

(参考)前ページのdb2pd実行例

> db2pd -db EMPLOYEE -tablespacesTablespace Configuration:Address Id Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe LastConsecPg Name0x00007F2CB1B0BDA0 0 DMS Regular 4096 4 Yes 4 1 1 Off 1 0 3 SYSCATSPACE0x00007F2CB1B0D520 1 SMS SysTmp 4096 32 Yes 32 1 1 On 1 0 31 TEMPSPACE10x00007F2CB1B10C60 2 DMS Large 4096 32 Yes 32 1 1 Off 1 0 31 USERSPACE10x00007F2CB1B123E0 3 DMS Large 4096 4 Yes 4 1 1 Off 1 0 3 SYSTOOLSPACE0x00007F2CB1B13B60 4 SMS UsrTmp 4096 4 Yes 4 1 1 On 1 0 3 SYSTOOLSTMPSPACE

Tablespace Statistics:Address Id TotalPgs UsablePgs UsedPgs PndFreePgs FreePgs HWM Max HWM State MinRecTime NQuiescersPathsDropped0x00007F2CB1B0BDA0 0 24576 24572 23296 0 1276 23296 23296 0x00000000 0 0 No 0x00007F2CB1B0D520 1 1 1 1 0 0 0 0 0x00000000 0 0 No 0x00007F2CB1B10C60 2 102400 102368 61696 0 40672 80256 80256 0x00000000 0 0 No 0x00007F2CB1B123E0 3 8192 8188 152 0 8036 152 152 0x00000000 0 0 No 0x00007F2CB1B13B60 4 1 1 1 0 0 0 0 0x00000000 0 0 No

Tablespace Autoresize Statistics:Address Id AS AR InitSize IncSize IIP MaxSize LastResize LRF0x00007F2CB1B0BDA0 0 Yes Yes 33554432 -1 No None None No 0x00007F2CB1B0D520 1 Yes No 0 0 No 0 None No 0x00007F2CB1B10C60 2 Yes Yes 314572800 104857600 No 1073741824 None No 0x00007F2CB1B123E0 3 Yes Yes 33554432 -1 No None None No 0x00007F2CB1B13B60 4 Yes No 0 0 No 0 None No

Containers:Address TspId ContainNum Type TotalPgs UseablePgs PathID StripeSet Container 0x00007F2CB1B0D2E0 0 0 File 24576 24572 0 0 /home/db2inst1/db2inst1/NODE0000/EMPLOYEE/T0000000/C0000000.CAT0x00007F2CB1B0EA00 1 0 Path 1 1 0 0 /home/db2inst1/db2inst1/NODE0000/EMPLOYEE/T0000001/C0000000.TMP0x00007F2CB1B121A0 2 0 File 102400 102368 0 0 /home/db2inst1/db2inst1/NODE0000/EMPLOYEE/T0000002/C0000000.LRG0x00007F2CB1B13920 3 0 File 8192 8188 0 0 /home/db2inst1/db2inst1/NODE0000/EMPLOYEE/T0000003/C0000000.LRG0x00007F2CB1B15040 4 0 Path 1 1 0 0 /home/db2inst1/db2inst1/NODE0000/EMPLOYEE/T0000004/C0000000.UTM

Page 29: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

29

でもちょっとめんどう... (本日2回目)色々なデータを取るにはdb2perf_browseを入れて、複数のSQLを書いておいて、定期実行して...

⇒ 結構面倒ですね

そこで 終兵器 db2top– もともとは一部のOS用のDB2にだけに実装されていたコマンド– あまりに便利なのでDB2 for Linux/Unixで標準コマンドに

どこがいいの?– 軽量(負荷を増やさない)– 簡単(1つキーを押すだけ)– GUI無しの環境でも使える

– 見たい情報がリアルタイムグラフ化– 結果をファイルに記録できる

※db2topの取得方法については参考資料②にURLを記載しています

Page 30: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

30

db2topを使う① リアルタイムで眺める

B:ボトルネック表示d:DB全体の状況t:表スペースb:バッファープールm:ヒープ全般D:(動的)SQL表示

> db2top -d DB名 で起動後、ショートカットキーで画

面を切り替え。Iでモニタリング間隔を変更可能。iで動

作中のオブジェクトのみを表示

•ボトルネック表示(B)•DB全体(d)•表スペース(t)

Page 31: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

31

db2topを使う②応用編

見たい情報を絞り込む– /(スラッシュ)を押すと、正規表現で絞り込みが

可能• 例) /EMP[0-9] → EMP0,EMP1... EMP9

にマッチ

– z で指定列での降順ソート(Zで昇順)– c で表示する列を指定可能

リスト内のいずれかの文字にマッチする[]

文字列を一塊で扱う()

エスケープ文字¥

直前の文字の0文字または1文字の連続?

直前の文字の0文字以上の連続* (アスタリスク)

直前の文字の1文字以上の連続+

任意の文字一文字にマッチする. (ピリオド)

左右どちらかの正規表現にマッチする| (パイプ)

行の最後にマッチする$

行の先頭にマッチする^

意味メタキャラクタ

SQLの詳細を得るには– 各SQLにはハッシュ化された値が付いているので、Lを押した後に入力すると詳細が分かる

• eでExplain(実行計画)も確認可能

Page 32: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

32

db2topを使う③ 記録と調査・報告用

ファイルに詳細を記録する– Sを押すと、SNAPSHOTコマンド実行される

• viで表示されるので :w ファイル名 で保存

– db2top起動時に、 -bを指定してバックグラウンドモードで起動• データベース(-d)、取得間隔[秒](-i)、取得期間[分](-m)あるいは取得回数(-s)を指定• 例) > db2top -d EMPLOYEE -b d -i 1 -m 10 > db2top.csv

(-bの後のオプションの意味)

-b : background mode

option: d=database, l=sessions, t=tablespaces, b=bufferpools, T=tables, D=Dynamic SQL, s=Statements, U=Locks, u=Utilities, F=Federation, m=Memory

Page 33: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

33

簡単な定常監視

MONREPORTモジュール (DB2 9.7 FP1新機能)– 人が読みやすいレポートを生成する

例)MONREPORT.DBSUMMARYプロシージャ

> db2 "CALL MONREPORT.DBSUMMARY(300)" >

today.log

• 引数で指定された秒数の間データをモニタし、レ

ポートを作成する

もしくは、MON_DB_SUMMARYビュー

> call

db2perf_browse('SYSIBMADM.MON_DB_SUMMARY')

※MONREPORTモジュール

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.rtn.doc/doc/r0056368.html

Page 34: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

34

まとめ

モニタリングは、監視・パフォーマンスチューニングの基礎

– 監視とパフォーマンスチューニングは地続きです

層(レイヤー)を意識して確認

– 外堀(下層)から

– OSレベル(vmstat,nmon など)

– DB2レベル(メトリック、db2topなど)

次のステップ

– 以下に技術情報が集められています• http://www.ibm.com/developerworks/jp/data/products/db2/db2_97.html

– お勧め資料• DB2 V9.7 運用管理ガイド: データベース・モニタリング

http://www.ibm.com/developerworks/jp/data/products/db2/operation-management-guide/v97_database-monitor.html

• DB2マニュアル:モニタリング(PDF)http://public.dhe.ibm.com/ps/products/db2/info/vr97/pdf/ja_JP/DB2Monitoring-db2f0j972.pdf

• DB2マニュアル:問題判別とパフォーマンスチューニング(PDF)http://public.dhe.ibm.com/ps/products/db2/info/vr97/pdf/ja_JP/DB2PerfTuneTroubleshoot-

db2d3j972.pdf

Page 35: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

35

参考資料① CLUB DB2の過去資料、入門資料

CLUB DB2の過去セミナー資料公開中– http://ibm.com/developerworks/wikis/display/clubdb2/materials

カンタン!DB2テクテク第1歩 基本機能編– 若干古い資料ですが、各種基本コマンドの使い方がやさしく解説されています– http://ibm.com/jp/software/data/developer/library/techdoc/kantandb2.html

db2pd利用ガイド DB2 v9対応版– 問題判別や監視に大変有用なdb2pdの使い方解説– http://ibm.com/jp/domino01/mkt/dminfo.nsf/doc/00217BBA

DB2 Express-Cの導入方法解説(無料のDB2で試しましょう!)– DB2 Express-C 9.7.4 for Windows クイックインストール• http://www.ibm.com/developerworks/jp/offers/db2express-c/installwin_v974/

– DB2 Express-C 9.7.4 for Linux クイックインストール• http://www.ibm.com/developerworks/jp/offers/db2express-c/installlin_v974/

Page 36: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

36

参考資料② nmon,db2top,db2perf_browse関連nmon– nmon ホームページ (AIX版)

• http://www.ibm.com/developerworks/wikis/display/WikiPtype/nmon– nmon for Linux

• http://nmon.sourceforge.net/pmwiki.php– nmon Analyzer

• http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser– nmon Consolidator (nmon Analyzerの改良版)

• http://www.ibm.com/developerworks/wikis/display/WikiPtype/nmonconsolidator

db2top– db2top 簡易ユーザーマニュアル(英語)

• http://www-01.ibm.com/support/docview.wss?uid=swg27009542– 米developerWorksのdb2top関連記事(英語)

• https://www.ibm.com/developerworks/mydeveloperworks/blogs/thekguydw/tags/db2top

db2perf_browse– http://www.zinox.com/files/db2perf_browse.txt (説明)– http://www.zinox.com/files/db2perf_browse.db2 (ストアドプロシージャ本体)– chat the lab "The Latest in Advanced Performance Diagnostics for DB2" の動画と資料

• http://www.channeldb2.com/events/the-latest-in-advanced

Page 37: CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門

37

参考資料③DB2のマニュアル

DB2のオンラインドキュメント:インフォメーションセンター常に 新の情報が閲覧できます。検索機能付き– DB2 9.7版

• http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp– DB2 9.5版

• http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp– DB2 9.1版

• http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp

– ネットワークに繋がっていなくても閲覧できる「オフライン版」• http://db2.jugem.cc/?eid=1933

DB2のPDF版マニュアル日本語、英語など各国語版がダウンロード可能です– DB2 9.7版

• http://ibm.com/support/docview.wss?rs=71&uid=swg27015149– DB2 9.5版

• http://ibm.com/support/docview.wss?rs=71&uid=swg27009728– DB2 9.1版

• http://ibm.com/support/docview.wss?rs=71&uid=swg27009553

DB2の日本語ドキュメント一覧は以下の短縮URLからも辿れます

http://j.mp/db2docsja