私たちは、様々なテーブルに対するINSERT/UPDATE/DELETEステートメントに関してかなりのデータベース活動を実行するシステムを持っています。このため、統計は古くなり、これは全体のパフォーマンスに反映されます。Oracle GATHER_SCHEMA_STATSのしくみ
定期的にDBMS_STATS.GATHER_SCHEMA_STATS
を呼び出す予定のジョブを作成します。私たちは自分自身を集め、実際の統計は、システム処理に影響を与えたくないので、さらに、我々はかなり頻繁に統計を収集し、GATHER STALE
オプションを使用することを考えている:
DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME => 'MY_SCHEMA', OPTIONS =>'GATHER STALE')
これは、ほぼ瞬時に実行されるが、前以下、この文を実行すると、 統計が収集した後、同じ値と同じレコードを戻すようだ:
SELECT * FROM user_tab_modifications WHERE inserts + updates + deletes > 0;
実行するために取って非常に短い時間とUSER_TAB_MODIFICATIONS内容は同じままという事実をOPTIONS =>'GATHER STALE'
が実際に行うべきことを期待しているかどうか私に質問します。私は後に陳腐としてもはや報告再前に古くなったと報告表を参照してくださいすることができ集める前に再度これを実行して、後の統計一方:他の一方で
DECLARE
stale dbms_stats.objecttab;
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'MY_SCHEMA', OPTIONS =>'LIST STALE', objlist => stale);
FOR i in 1 .. stale.count
LOOP
dbms_output.put_line(stale(i).objName);
END LOOP;
END;
場合my_table
があると言うことができます私のテーブルの1つがuser_tab_modifications
の一部であるテーブルの一部として表示されていて、inserts + updates + deletes > 0
と表示されていましたが、私はmy_table
が変更されたと報告されなくなっています。
EXECUTE DBMS_STATS.GATHER_TABLE_STATS(ownname => 'MY_SCHEMA', tabname => 'MY_TABLE');
だから私の質問は以下のとおりです。
- は正しい私のアプローチです。
options => 'GATHER STALE'
を実行するだけで新しい統計情報が得られると信じてもいいですか、適切な数の挿入、更新、削除が戻ってくるすべてのテーブルの統計情報を手動で収集する必要がありますか? - user_tab_modificationsが実際にリセットされるとき。明らかに
GATHER STALE
オプションが
それを行うにはいないようです私たちは、Oracle Database 11g Enterprise Editionのリリース11.2.0.3.0を使用している - 64ビットの生産
なぜ私の質問にはプログラミングが行われていないことが示されているのか分かりません。 DBMS_STATSはOracleパッケージであり、これを使用する最良の方法は何かを知りたい。 – Julian