Db2の性能を継続的に記録しようとして、MON_GET 系の表関数を定期実行するスクリプトを組む。よくある構成ですが、動かしてしばらく経ってからデータを見ると「値が増えたり減ったりしている」「CSVにヘッダーしか入っていない」ということが起きます。
どちらもスクリプトはエラーを出さずに動き続けるのが厄介な点です。この記事ではまず見る値と、症状からの逆引きを最短でまとめます。実機での検証ログや累積値の扱い方は末尾のZenn記事にあります。
まず見る(結論)
監視データがおかしいときは、SQLを疑う前にデータベースが活動化されたままかを確認します。MON_GET の累積値の起点は「そのデータベースが活動化された時点」で、非活動化されるとメモリ上のカウンターは初期化されます。
# 監視対象DBが活動状態か(接続数0でも活動していればOK)
db2 list active databases
# 活動化されていなければ明示的に活動化する
db2 "ACTIVATE DATABASE SAMPLE"
症状 → 原因 → 対処(逆引き)
| 症状 | よくある原因 | まず打つ手 |
|---|---|---|
| ある日を境に値がゼロに戻っている | Db2の再起動で活動化が解除された。ACTIVATE DATABASE は再起動で引き継がれない |
インスタンスの起動手順に db2 "ACTIVATE DATABASE <DB名>" を組み込む |
| 差分を取ると負の値になる | 2点間でDBが再活動化され、累積値の起点が変わっている | 負の差分は異常値ではなく起点リセットとして扱う |
| 累積値が増えたり減ったりする | 明示的な活動化をせずアプリ接続に依存しており、接続が枯れるたびに非活動化されている | db2 list active databases で活動状態を確認する |
| CSVにヘッダーしか入らない | WHERE句で SYSDEFAULT% を除外している。既定環境ではサービスクラスが全て SYSDEFAULT 始まりのため全滅する |
除外せず SYSDEFAULTUSERCLASS を名指しで指定する |
| 障害直後に該当接続の情報が無い | MON_GET_CONNECTION は接続中の行しか返さない。切断で消える |
MON_GET_SERVICE_SUBCLASS の累積値に切り替える |
| CSVの列がずれる | タイムスタンプ内の空白を、空白→カンマ変換でそのままCSV区切りにしている | 空白を含まない形式で埋め込むか、列位置で切り出す |
ACT_COMPLETED_TOTAL が0のまま |
その時間帯に完了したアクティビティが無いだけのことが多い | MON_ACT_METRICS が NONE でないかだけ確認する |
kill しても止まらない |
trap は sleep を中断しない。停止は最大1インターバル遅れる |
プロセスが消えるまで待ってから次を起動する |
LAST_ACTIVITY_END で SQL0206N |
この列は MON_GET_CONNECTION に存在しない |
CONNECTION_START_TIME / APPL_IDLE_TIME を使う |
上から順に、値の異常(リセット)→ 収集対象の誤り(0件)→ 出力の破損、の順で潰すと早く終わります。SQLの列名を疑うのは最後で構いません。
通常運用では運用開始時に活動化するので平常時は問題になりません。効いてくるのはインスタンスを再起動したときです。ACTIVATE DATABASE は db2stop / db2start をまたいで引き継がれないため、起動手順に入っていないと再起動やフェイルオーバーの後から静かにリセットが始まります。CSVには数字が入り続けるので、気づくのは障害後にグラフを描いたときになります。
それでも切り分からないとき(実機ログつきの詳解)
活動化あり/なしでカウンターがどう変わるかの実測、累積値から区間値への変換方法、収集スクリプトを書くときの実装上の注意まで含めた詳しい解説は、Zennのフル記事にまとめています。
関連: Db2 モニタリングツール / Db2 イベントモニター / Db2「SQL1224N」データベースエージェントが起動できない原因を切り分ける
この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。