統計情報の取得方法

統計情報を収集するための DBMS_STATS パッケージが提供されているのでそれを用いる。
ANALYZE TABLE は 10g 移行は非推奨。(マニュアルに CBO 向けに ANALYZE を実行しないでくださいと記載)
ANALYZE が非推奨である理由は分からないが DBMS_STATS の方が有効な実行計画を立てるために必要な情報を集めてくれるらしい。

≪ DBMS_STATS を利用した統計情報の集め方 ≫
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'EMP', =>FALSE);
EXEC DBMS_STATS.GATHER_INDEX_STATS('SCOTT', 'PK_EMP', NO_INVALIDATE=>FALSE);

NO_INVALIDATE に FALSE を指定しておかないと依存カーソルを無効化しない場合がある(DBMS_STATS.AUTO_INVALIDATE の設定値による)ため、統計情報を集めてもすぐに有効な実行計画を立ててくれない可能性がある。

参考資料より no_invalidate の説明部分を抜粋

TRUEに設定されている場合は、依存カーソルを無効化しません。FALSEに設定されている場合は、すぐに依存カーソルを無効化します。依存カーソルの無効化の時機をOracleが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これがデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャ、SET_GLOBAL_PREFSプロシージャ、SET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

参考資料(DBMS_STATS)



  • 最終更新:2014-01-24 12:18:17

このWIKIを編集するにはパスワード入力が必要です

認証パスワード