1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Db2:遅いSQLを見つける方法

Last updated at Posted at 2021-12-21

Db2が遅い

Db2が遅延する原因は様々です。トランザクションが増加したのかもしれません。SQLがロック・タイムアウトしているのかもしれません。いずれにせよ調査にあたり、遅延したときにどんなSQLが実行されていたかは知りたいです。遅いSQLがデータベース遅延の引き金であれば、そのSQLに対して対策を講じるのがあるべき姿だからです。そのためには遅いSQLを見つける必要があります。

この記事では遅いSQLを見つける方法を紹介します。

データベースの性能を評価したい方は以下の記事もご覧ください。
Db2:性能評価にSQL平均応答時間を用いる

どんなやり方があるのか

現場では以下をよく使います。

  • ロック・イベントモニター
  • db2pd
  • ステートメント・イベントモニター
  • MON_GET_PKG_CACHE_STMT 表関数
  • MON_CURRENT_SQL 管理ビュー

ロック・イベントモニター

デッド・ロックやロック・タイムアウトをしていないかを調べるときに使います。

  • データベース作成後、手動で常時有効に設定
  • デッド・ロックやロック・タイムアウトが発生するとDb2が自動的に情報を取得
  • 情報はdb2evmonfmt(Javaプログラム)でテキストファイルにフォーマット
  • どのSQLがデッドロック、もしくはロック待ちになっているのかを詳細に出力

以下はIBMのウェブサイトです。
[DB2 LUW] ロック・イベント・モニターの設定方法

db2pd

障害がまさに発生しているときに実行、その瞬間にメモリーにある診断情報を出力します。

  • 事前設定は必要ない
  • コマンドにより、診断情報を手動で出力
  • ロック取得状況、実行しているSQLの経過時間など詳細な情報を出力
  • 出力ファイルが大きいので見るのが大変

db2pdやロック・タイムアウトやついて知りたい方は以下の記事もご覧ください。
勉強会:Db2問題判別 ロック タイムアウトと長時間SQL

ステートメント・イベントモニター

遅延が再現できるときやピーク時間の詳細な動きを見たいときに使います。

  • 手動で一時的に有効化
  • 有効にしている間、全てのSQLの情報を取得できる
  • 詳細な情報を取得できる
  • 負荷が高く、出力ファイルも大きいので実行時間は1分、長くても3分

以下はIBMのウェブサイトです。
ステートメント・イベント・モニターによって生成されるデータ

MON_GET_PKG_CACHE_STMT 表関数

気軽に遅いSQLをチェックしたいときに使います。パッケージ・キャッシュにあるSQLを実行時間順に出力できます。

  • 事前設定は必要ない
  • select文の実行でパッケージ・キャッシュに残っているSQLを出力
  • 実行時間を降順でorder byすることで遅いSQLを識別
  • 同じSQLはまとめられ、実行時間と回数が積算される
  • Where句がパラメーターマーカーではなく文字だと別のSQLと扱われる
  • パッケージ・キャッシュに残っているSQLしか出力されない

以下はIBMのウェブサイトです。
MON_GET_PKG_CACHE_STMT 表関数 - パッケージ・キャッシュ・ステートメント・メトリックの取得

MON_CURRENT_SQL 管理ビュー

現在実行中のSQLを表示します。**cronで定期実行、遅いSQLがあったら収集することで、後から遅かったSQLを確認することができます。**ステートメント・イベントモニターやMON_GET_PKG_CACHE_STMT 表関数がリアルタイムでの取得に向いているのとは対照的です。

  • 事前設定は必要ない
  • select文の実行で現在実行中のSQLを出力
  • 経過時間を降順でorder byすることで遅いSQLを識別
  • 同じSQLも別々に出力
  • 経過時間をwhere句でフィルターしたのをcronで定期収集が吉

遅いSQLを収集したい方は以下の記事もご覧ください。
Db2:後から遅いSQLを見つけたい

以下はIBMのウェブサイトです。
MON_CURRENT_SQL - 全メンバーの全アクティビティーに関する主要なメトリックの取得

まとめ

各ツールを比較しました。状況によって、使い分けています。

ツール 負荷 情報量 取得方法
ロック・イベントモニター 低い 多い 自動取得、後で確認が可能
db2pd 低い 多い リアルタイムで手動取得が現実的
ステートメント・イベントモニター 高い 多い リアルタイムで手動取得が現実的
MON_GET_PKG_CACHE_STMT 表関数 低い 少ない リアルタイムで手動取得が現実的
MON_CURRENT_SQL 管理ビュー 低い 少ない cronで自動取得、後で確認が可能
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?