統計情報を取得してもSQLが遅い

人気ブログランキング

この前、DBMS_STATS をしてもSQLが遅くて少したったら速くなったということがあった。
Oracle10gからデフォルトで22時に統計情報を取得してくれるようになったが、
それを待ったわけでなくなぜだろう?と思っていったん放置していた。

たまたま、DBMS_STATSパッケージの罠 を見て、とった統計情報がすぐに使われるわけではないそうだ。
実行計画を決めるのは、HARD PARSE する時だから、カーソルを無効にさせないとだめなんですね。

exec dbms_stats.gather_table_stats('SCOTT', 'EMP');
ではだめで
exec dbms_stats.gather_table_stats('SCOTT', 'EMP', no_invalidate=>false);
こうしないとダメらしい。

マニュアル を見るとまさしくその通りのことが書いてあった。
DBMS_STATS.SET_DATABASE_PREFS でデフォルトを変更できるようだが、false がデフォルトでいいような気がする。
統計情報取るときって、メンテ中か空いている時間にすると思うしね。

この記事へのコメント