ここではscott.emp
テーブルに対して行った手順を示します。Oracle:テーブルの統計情報をインポートした後、オプティマイザが動的サンプリングを使用します
select * from emp where empno > 7503
select * from table(dbms_xplan.display_cursor);
[..] Note ----- - dynamic statistics used: dynamic sampling (level=2)
exec DBMS_STATS.GATHER_TABLE_STATS ('scott','EMP');
select * from emp where empno > 7503.
select * from table(dbms_xplan.display_cursor);
-- No Dynamic sampling used --
テーブルの統計情報をエクスポート。
- インスタンスをクリーンアップし、新しいインスタンスを起動します。
- テーブルの統計情報をインポートしました。
select NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,USER_STATS from USER_TAB_STATISTICS where table_name ='EMP';
14 28-SEP-16 YES NO
select * from emp where empno > 7503.
select * from table(dbms_xplan.display_cursor);
Note ----- - dynamic statistics used: dynamic sampling (level=2)**
なぜ動的サンプリングは、表は統計情報を持っているにもかかわらず、使用されていますか?統計情報をインポートした後に何かをトリガする必要はありますか? 最初のインスタンス(ステップ5)で統計情報を収集した後、オプティマイザが動的サンプリングを使用しないのはなぜですか?
データベースのどのバージョンですか?ステップ7はどういう意味ですか?ステップ8でどの統計をインポートしましたか?テーブルempはパーティション化されていますか、パーティションの統計値は7503ですか?あなたは完全な実行計画を投稿できますか? – stee1rat
7で、DBをアンインストールして再インストールしました。 8では、私はテーブル統計だけをインポートしました。パーティション化されていない表はありません。ありがとう@stefan DSがオプティマイザをピックアップして回答セクションに同じように投稿した理由がわかりました。 – Chandan
は12cデータベースですか?これは、12cの機能「適応実行計画」によってトリガーされる新しい機能です。 – ibre5041