DB2でインデックスチューニングをする

DB2で実行計画を取得した時に、大変コストが高いものがあるということで
まず第一段階としてインデックスのチューニングをする事になりました。

最初は該当のSQLを目で追って、怪しそうなところにインデックスをはっていたのですが
めちゃくちゃ非効率と言う事で、インフラのDBAの人に相談したみたら
db2advis」コマンドはどうだろーと言うことでした。

db2advis

コントロールセンターに付属している「設計アドバイザー」のコマンドライン版
作成すべきインデックスについてアドバイスを取得する

使用方法

db2advis -d データベース名 -n スキーマ名 -i SQLファイル名

参考にさせて頂いたのはこちらのサイト

Unofficial DB2 BLOG

作成すべきインデックスについてアドバイスを取得するには

チューニング手順

1 実行計画の取得

別のエントリで紹介したA5:SQL Mk-2というツールで実行計画を取得します。
SQLをコピペで貼り付けて、「Ctrl + E」を実行すると取得出来ます。「Ctrl + Q」でSQLを整形出来ます。

2 db2advisコマンドを実行する

僕はSQLファイルをテキストに丸ごと貼り付けて、オプションの「-i」で読み込ませていました。
オプションの「-s」を使うとそのままSQLを貼り付けて実行出来ます。

実行すると有用であろうインデックスのSQLとRUNSTATSコマンド、元のインデックスをドロップするSQL(笑)
そして実行前と実行後のコスト値(パーセントも表示してくれます)を表示してくれます。

後はインデックス名を命名規約に則っるように変更して実行したらチューニングは完了です。
実行後に再度1の手順で実行計画を取得すると、コスト値が変化やテーブルスキャンの有無を確認出来ます。


ただ全てのSQLを上手くチューニングしてくれるわけではありません。
中にはインデックス76個はってコスト10%の改善とか悲しい結果もありました。
こんなのはもちろんSQL自体がマズいのでSQLそのもののチューニングになります。
チューニングの1つの手段として結構有用だと思いました。
チューニングはとても難しいですがやりがいのある作業です。