DB2 で妙にクエリが遅い

うちの DB2 さん、普段なら数秒で終わる単純なSQLなのに、今日は何十分待っても終わらないっていう現象があって。止まってるんちゃうか?っていうくらい遅い。

確かにテーブル内の件数は数百万件あるけれども。でも昨日までは数秒でおわっていたじゃない?

DB2 さんは SQL の動きを決定するためにテーブルの統計情報というものを使用します。必要なところにインデックスがはってあっても統計情報とテーブル内の現状とが整合性取れてないとまったくパフォーマンスが出ません。

ということで統計の収集コマンドを。

 

db2 "RUNSTATS ON TABLE SCHEMA.TABLENAME"
SQL2314W いくつかの統計が不整合な状態になっています。 新しく収集された "TABLE" 統計が、既存の "INDEX" 統計と矛盾しています。 SQLSTATE=01650

 

あかーん。整合性取れてない状態やー。これじゃいくらインデックス用意してもそもそもアクセスパスが正しく決定できない。というわけでインデックスの基本統計を収集しなおしてください。

 

db2 "RUNSTATS ON TABLE SCHEMA.TABLENAME FOR INDEXES ALL"
DB20000I RUNSTATS コマンドが正常に完了しました。

 

よし。できあがりました。そしていつものSQLを投げてみます。数秒で終わりました。よかった。