私は、Oracleデータベースのテーブルとインデックスの統計情報を収集することについていくつかの読書を行ってきましたが、残念です。Oracle SQLのテーブルとインデックスの統計
議論のために、Oracle 11gR2をRDBMSとしましょう。テーブルとインデックスの統計情報の収集に関しては、それをいつ実行するのが好ましいか、Oracleは本当に自動的に必要な統計を収集していますか?
最初の点について:いつ実行する必要がありますか。私は、経験則として、テーブルを分析した最後の時間以来、テーブルのレコードの約10%が変更(挿入、更新など)された後にテーブルとインデックスの統計情報を収集する必要があることを読んだことがあります。
第2の点については、これが好ましい方法です。表と索引統計の両方を計算する場合は、表がパーティション化されていないと仮定して、デフォルト・オプションを指定してDBMS_STATS.GATHER_TABLE_STATSを実行しますか?
第3の点について:オラクルは実際に必要な統計を実際に収集していますか?これが当てはまる場合、私はテーブル統計を収集することを心配してはいけませんか(ポイント1と2を参照)?
ありがとうございます。
EDIT:ammoQによってコメントに続き、私は質問には、ユースケースは本当にここに、あるものでは明確ではないことに気づきました。私の質問は、データベース操作によって通常実行されるプロシージャを介してではなく、ユーザーのアクション、つまり手動で「操作」されていないテーブルに関するものです。たとえば、私の例を挙げる。私のETLプロセスは、毎日いくつかのテーブルをロードし、約1時間でそれを行います。その1時間のうち、約半分がテーブル自体の分析に費やされます。したがって、表領域は挿入または更新後に毎日分析されます。これは残酷なので、問題と思われます。
いつ実行する必要がありますか:クエリオプティマイザが悪い計画を選択したことに気付いたときに、最低限です。 ;-) –
コメントありがとうございます。私はその質問を明確にした。 – DylanW80
テーブルの統計情報を収集するautotasks:https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:1133388300346992024 –