2016-09-29 9 views
1

ここではscott.empテーブルに対して行った手順を示します。Oracle:テーブルの統計情報をインポートした後、オプティマイザが動的サンプリングを使用します

  1. select * from emp where empno > 7503

  2. 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)で統計情報を収集した後、オプティマイザが動的サンプリングを使用しないのはなぜですか?

    +1

    データベースのどのバージョンですか?ステップ7はどういう意味ですか?ステップ8でどの統計をインポートしましたか?テーブルempはパーティション化されていますか、パーティションの統計値は7503ですか?あなたは完全な実行計画を投稿できますか? – stee1rat

    +0

    7で、DBをアンインストールして再インストールしました。 8では、私はテーブル統計だけをインポートしました。パーティション化されていない表はありません。ありがとう@stefan DSがオプティマイザをピックアップして回答セクションに同じように投稿した理由がわかりました。 – Chandan

    +0

    は12cデータベースですか?これは、12cの機能「適応実行計画」によってトリガーされる新しい機能です。 – ibre5041

    答えて

    0

    理由があります。ステップ8では、私はテーブルの統計情報だけをインポートしています。 db stats、system、辞書の統計情報をインポートすると、オプティマイザは動的サンプリングを実行しません。

    オプティマイザのルール:オプティマイザに統計情報がない場合は、サンプリングを実行しようとします。

    実行計画をシミュレートするには、すべての統計をインポートする必要があります。

    関連する問題