Oracle 統計情報の失効

統計情報が失効しているかどうかの確認方法が少しややこしい。

失効の条件

データベースにて設定されている閾値(デフォルト10%)を超えてデータ変動が発生した場合に、統計情報が失効される。

閾値は下記コマンドにて変更できる。

exec DBMS_STATS.SET_SCHEMA_PREFS(ownname => ‘OWNER’, pname => ‘STALE_PERCENT’, pvalue => 5);
このプロシージャはテーブル単位でも指定可能。

なお、失効されるとは言っても、既にハードパースされてメモリ上に保持されている実行計画が失われるわけではない。

失効の確認
ややこしいのはここから。
失効しているかどうかの確認は、DBA_TAB_STATISTICSのSTALE_STATSカラムを見て判別できるのだが、この情報は最新情報を反映されたものであると限らないからである。
テーブルの変更情報はDBA_TAB_MODIFICATIONSに保持されており、この情報からSTALEか否かを判断されているが、DBA_TAB_MODIFICATIONSに反映されていないメモリ情報の情報が抜け落ちているということ。
なので、失効確認を行うには、下記コマンドを実行してからDBA_TAB_STATISTICSを参照しよう。
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();

シェアする

  • このエントリーをはてなブックマークに追加

フォローする