もっと詳しく

ドキュメントに従って、FLUSH_DATABASE_MONITORING_INFOプロシージャは、ディクショナリ内のすべてのテーブルのメモリ内監視情報をフラッシュします。 * _TAB_MODIFICATIONS、* _ TAB_STATISTICS、および* _IND_STATISTICSビューの対応するエントリは、Oracleデータベースが定期的にフラッシュするのを待たずに、すぐに更新されます。 この手順は、これらのビューに関する最新情報が必要な場合に役立ちます。 GATHER _ * _ STATSプロシージャは内部で監視情報をフラッシュするため、統計を収集する前にこのプロシージャを実行する必要はありません。

これらのビューは、MONITORING属性を持つテーブルに対してのみ入力されます。 これらは、長期間にわたる統計収集を目的としています。 パフォーマンス上の理由から、Oracle Databaseは、実際の変更が発生したときにこれらのビューにすぐにデータを入力しません。

DBMS_STATS PL / SQLパッケージのFLUSH_DATABASE_MONITORING_INFOプロシージャを実行して、これらのビューに最新の情報を入力します。 この手順を実行するには、ANALYZE_ANYシステム権限が必要です。

exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;

上記のパッケージを実行した後、以下のクエリは更新されたデータを提供します。

select table_owner,table_name,inserts,updates,deletes from DBA_TAB_MODIFICATIONS;

このパッケージを実行する方法は?

以下に示す例を検討してください。

SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
PL/SQL procedure successfully completed.

統計収集プロシージャを実行している場合、すべての統計が* _TAB_MODIFICATIONS、* _ TAB_STATISTICS、および*_IND_STATISTICSビューに収集されることに注意してください。 上記の呼び出しは、そのような例外的な場合にのみ発生します。

最終的な考え

照会時に最新の情報を取得したい場合は、プロシージャーDBMS_STATS.FLUSH_DATABASE_MONITORING_INFOを呼び出すことにより、このデータを手動でフラッシュすることができます(内部的には、すべての統計収集操作の前にモニター・データがフラッシュされます)。 次に、USER_TAB_STATISTICSビューのSTALE_STATS列を照会することにより、どのテーブルに古い統計があるかを確認できます。

SQL> select table_name,stale_stats from user_tab_statistics;

STALE_STATSがに設定されているテーブル いいえ、最新の統計があります。 STALE_STATSがに設定されているテーブル はい、古い統計があります。 STALE_STATSが設定されていないテーブルには、統計がまったくありません。

The post FLUSH_DATABASE_MONITORING_INFOプロシージャ–オタク日記 appeared first on Gamingsym Japan.