2011-10-20 5 views
3

私はDBMS_STATS.GATHER_SCHEMA_STATS手順を使用して自分のコードで統計を収集します。DBMS_STATSはテーブルを分析しますか?

BEGIN 
    DBMS_STATS.gather_schema_stats 
          (ownname   => '<SCHEMA NAME', 
          estimate_percent => DBMS_STATS.auto_sample_size, 
          options   => 'GATHER STALE', 
          DEGREE   => NULL, 
          CASCADE   => DBMS_STATS.auto_cascade, 
          granularity  => 'auto' 
          ); 
end; 

私の質問:私はこのコードを実行した後、私はTOADツールを使用して、テーブルの最後に分析の日付をチェックし、私はDBMS_STATS.GATHER_SCHEMA_STATS手順を実行したときには、他のいくつかの過去の日付の代わりに、現在の日付を示しています。

これは、DBMS_STATSがテーブルを分析しないことを意味しますか?

答えて

8

オプションGATHER STALEを指定すると、最後に統計情報が収集されてから重要な変更が行われたオブジェクトの統計情報のみを収集するように指示されます。統計が最後に収集されてから表があまり変更されていないと判断された場合、統計は再び収集されません。

Oracleは、これらの表のDMLを監視することによって表が大幅に変更されたと判断します(Oracleはデフォルトで11gの表を監視します。そのデータは定期的に(おおよそ数時間ごとに)DBA_TAB_MODIFICATIONSに書き込まれます。 がGATHER STALEオプションで実行されている場合、オラクル社では、おおよその変更数をDBA_TAB_MODIFICATIONSと比較して、表の以前の統計を比較して、十分な行が変更されて統計を再収集する価値があるかどうかを判断します。

関連する問題