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は良く使う 情報がまとめられた便利なビュー
25 DB2の必修モニタリングポイント③ 遅いクエリーの発見 パフォーマンスチューニングでは、遅いクエリーに対してチューニングする事が重要 – 一番良いのは、クライアントアプリケーション側でSQLを管理していること – 無いなら、パッケージキャッシュから(実行されたSQLを一次的にキャッシュしておく領域) エレメントで計算するには、 – STMT_EXEC_TIME:クエリーを実行した時間 – EXECUTABLEID:SQL毎に付けられるID(ハッシュ値) をベースに検索 • 以下の例は、同じクエリーの実行時間をSUMで足して、遅いもの順でトップ10を出力した例 • EXECUTABLEIDではSQLが分からないので、以下のようにして情報を出力 EXECUTABLEIDを第二引数に指定。(xを付けるのをお忘れ無く) SELECT SUM(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_ID ORDER BY TOTAL_EXEC_TIME DESC FETCH FIRST 10 ROWS ONLY call db2perf_browse('MON_GET_PKG_CACHE_STMT(NULL,x''010000000000000084000 0000000000000000000020020120223161303238342'',NULL,-2)');