Question & Answer
Question
Db2 を導入しているサーバーの CPU が高騰してパフォーマンスに影響が出ています。
原因調査をおこなうために、まずどのような資料を収集したらよいでしょうか。
Answer
CPU 高騰が発生した際は問題の切り分けのため再現時の資料から、どのプロセス / EDU が CPU を消費しているか、高負荷なステートメントが存在しないかを確認します。
IBM テクニカル・サポートへ調査を依頼する際は、以下の様な手順で必要な資料を収集してください。
- 準備作業
【Linux/Unix/Windows 共通の作業】
(V10.5 以前のみ) 事前に以下のリンク先のページから db2mon スクリプトの .tar ファイルをダウンロードし、資料収集時の作業ディレクトリに展開してください。V11.1 以降、db2mon は製品の sqllib/samples/perf ディレクトリーに配置済みです。
db2mon script for monitoring performance【Windows の場合の追加作業】
Windows 環境では上記作業でダウンロードした .tar ファイル内の db2mon.sql を使用します。
db2mon.sql を使用するためには以下の前提条件を満たす必要があります。- ご使用の Db2 のバージョンにより .tar ファイルは異なりますので、必ず db2level 等で使用している Db2 のバージョンを確認して該当する .tar ファイルをダウンロードしてください。
- db2mon は実行するとデフォルトで 30 秒間データベース・アクティビティをモニターし、完了するとレポートを出力します。
- v10.5 FP5 以下の環境にて v10.5 用の db2mon.sh を実行すると、いくつかの表関数のモニター・エレメントが存在しないために必要な情報が収集できないことが報告されています。v10.5 FP5 以下の環境をご利用の場合は v10.1 用の db2mon.sh を替わりにご利用ください。
- db2mon は Db2 v11.1 以降デフォルトでインスタンス・ディレクトリー内の ~/sqllib/samples/perf 配下にも置かれるようになりました。詳細は "関連情報" のリンク先をご確認ください。
- db2mon.sql を実行するためには USER TEMPORARY 表スペースが必要です。存在しない場合は以下のように CREATE TABLESPACE ステートメントを使用して USER TEMPORARY 表スペースを作成してください。
db2 create user temporary tablespace <表スペース名>
- データベース構成パラメーター MON_ACT_METRICS を BASE (デフォルト値) 以上かつ、MON_REQ_METRICS を BASE 以上 (デフォルト値は EXTENDED) に設定する必要があります。現行値を確認して設定が不足している場合は以下の様に UPDATE DB CFG コマンドで設定を変更してください。
db2 update db cfg using mon_act_metrics base db2 update db cfg using mon_req_metrics base
- CPU 高騰の問題が発生していることを確認した上で、以下の手順通りにコマンドを実行してください。
【Linux/Unix 環境の場合】
Linux/Unix 環境ではインスタンス・オーナーとしてログインしてから以下の手順でコマンドを実施してください。$ db2 connect to <データベース名> $ TS1=`date +"%Y%m%d_%H%M%S"` $ db2 "export to mon_get_pkg_$TS1.ixf of ixf select current_timestamp as SNAP_TIME, t.* from table(mon_get_pkg_cache_stmt(null,null,null,-2)) as t" $ top -b -n 5 > top_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -eve > db2pd-eve_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -stack all $ ./db2mon.sh <データベース名> > db2mon_`date +"%Y%m%d_%H%M%S"`.out
-- 1 分間待機 --
$ top -b -n 5 > top_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -eve > db2pd-eve_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -stack all $ ./db2mon.sh <データベース名> > db2mon_`date +"%Y%m%d_%H%M%S"`.out
-- 1 分間待機 --
$ top -b -n 5 > top_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -eve > db2pd-eve_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -stack all $ ./db2mon.sh <データベース名> > db2mon_`date +"%Y%m%d_%H%M%S"`.out $ db2 connect to <データベース名> $ TS2=`date +"%Y%m%d_%H%M%S"` $ db2 "export to mon_get_pkg_$TS2.ixf of ixf select current_timestamp as SNAP_TIME, t.* from table(mon_get_pkg_cache_stmt(null,null,null,-2)) as t"
上記資料が収集できましたら、以下のリンク先の手順を参考に db2support を収集してください。
[Db2] db2support の取得手順 (Linux/UNIX 版)
【Windows 環境の場合】
Windows 環境では Administrator としてログインし、 「DB2 コマンド ウィンドウ 管理者」を開き、以下の手順でコマンドを実施してください。db2 connect to <データベース名> set TS1=%DATE:/=_%_%TIME::=-% db2 "export to mon_get_pkg_%TS1%.ixf of ixf select current_timestamp as SNAP_TIME, t.* from table(mon_get_pkg_cache_stmt(null,null,null,-2)) as t" typeperf -sc 15 -si 1 "\Processor(_Total)\% Processor Time" "\Processor(_Total)\% User Time" "\Processor(_Total)\% Privileged Time" "\Process(*)\Id Process" "\Process(*)\% Processor Time" "\Process(*)\% User Time" "\Process(db2*)\% Privileged Time" -f BIN -o typeperf_"%DATE:/=_%_%TIME::=-%".blg db2pd -eve > db2pd_eve_"%DATE:/=_%_%TIME::=-%".out db2pd -edus > db2pd_edus_"%DATE:/=_%_%TIME::=-%".out db2pd -stack all db2 -tvf db2mon.sql > db2mon_"%DATE:/=_%_%TIME::=-%".out
-- 1 分間待機 --
typeperf -sc 15 -si 1 "\Processor(_Total)\% Processor Time" "\Processor(_Total)\% User Time" "\Processor(_Total)\% Privileged Time" "\Process(*)\Id Process" "\Process(*)\% Processor Time" "\Process(*)\% User Time" "\Process(db2*)\% Privileged Time" -f BIN -o typeperf_"%DATE:/=_%_%TIME::=-%".blg db2pd -eve > db2pd_eve_"%DATE:/=_%_%TIME::=-%".out db2pd -edus > db2pd_edus_"%DATE:/=_%_%TIME::=-%".out db2pd -stack all db2 -tvf db2mon.sql > db2mon_"%DATE:/=_%_%TIME::=-%".out
-- 1 分間待機 --
typeperf -sc 15 -si 1 "\Processor(_Total)\% Processor Time" "\Processor(_Total)\% User Time" "\Processor(_Total)\% Privileged Time" "\Process(*)\Id Process" "\Process(*)\% Processor Time" "\Process(*)\% User Time" "\Process(db2*)\% Privileged Time" -f BIN -o typeperf_"%DATE:/=_%_%TIME::=-%".blg db2pd -eve > db2pd_eve_"%DATE:/=_%_%TIME::=-%".out db2pd -edus > db2pd_edus_"%DATE:/=_%_%TIME::=-%".out db2pd -stack all db2 -tvf db2mon.sql > db2mon_"%DATE:/=_%_%TIME::=-%".out set TS2=%DATE:/=_%_%TIME::=-% db2 "export to mon_get_pkg_%TS2%.ixf of ixf select current_timestamp as SNAP_TIME, t.* from table(mon_get_pkg_cache_stmt(null,null,null,-2)) as t"
上記資料が収集できましたら、以下のリンク先の手順を参考に db2support を収集してください。
[Db2] db2support の取得手順 (Windows 版) - 資料収集が完了したら IBM テクニカル・サポートに連絡し、各資料をご送付ください。
-
db2pd -stack all の結果は Linux/Unix では<PID>.<TID>.stack.txt 、Windows では <PID>.<TID>.stack.bin という形式で DIAGPATH に出力されます。それ以外のコマンドの結果はカレント・ディレクトリに出力されます。
DIAGPATH に関する詳細は以下の文書を参照してください。
[Db2] Db2 診断ログ (db2diag.log) や管理通知ログの出力先 -
Windows 環境では db2pd -stack all によるトラップ・ファイルの出力がバイナリ形式のため、以下のようなコマンドで出力されたトラップ・ファイルをフォーマットしてください。
例:db2xprt 4194320.000.stack.bin 4194320.000.stack.fmt
-
運用上の考慮点
- top コマンド / typeperf コマンドは約 15 秒間、db2mon.sh は約 30 秒間情報を収集し続け、完了するとファイルを出力します。
- コマンドがハングして応答がなくなった場合は Control + C で中断してください。
- 現行接続を使用して db2mon を実行した場合に、実行中に Ctrl-C を押すなどして db2mon.sql を中断すると、CURRENT SCHEMA 特殊レジスターが SESSION_USER に設定されたまま残ることがあります。
- db2pd -eve コマンドがハングしてしまい中断をおこなった場合は、以下のコマンドで代替資料を収集してください。
- db2pd -eve の代替コマンド (Linux/Unixの場合)$ db2pd -edus > db2pd_edus_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -agents > db2pd_agents_`date +"%Y%m%d_%H%M%S"`.out $ db2pd -db <データベース名> -apinfo > db2pd_apinfo_`date +"%Y%m%d_%H%M%S"`.out
db2pd -edus > db2pd_edus_"%DATE:/=_%_%TIME::=-%".out db2pd -agents > db2pd_agents_"%DATE:/=_%_%TIME::=-%".out db2pd -db [データベース名] -apinfo > db2pd_apinfo_"%DATE:/=_%_%TIME::=-%".out
関連情報
db2pd - Db2 データベースのモニターおよびトラブルシューティング・コマンド
db2mon によるパフォーマンス・モニター・データの収集とレポート作成
[Db2] パスポート・アドバンテージによく寄せられる質問
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
Was this topic helpful?
Document Information
Modified date:
04 April 2024
UID
ibm10734571