2018.12.12
OPTIMIZER INVALIDATION PERIOD
目次
- 1. 基本情報
- 2. 注意
- 3. 関連情報
基本情報
パラメータ情報
Syntax : _OPTIMIZER_INVALIDATION_PERIOD 設定方法 : ・Parameter File ・ALTER SYSTEM SET “_OPTIMIZER_INVALIDATION_PERIOD” = 18000 ・ALTER SESSION SET “_OPTIMIZER_INVALIDATION_PERIOD” = 18000
バージョンとデフォルト 9iR2 : - 10gR1: 18000 10gR2: 18000 11g: ?
説明
Oracle10gから統計情報を収集する際に関連SQL Cursorをすぐにinvalidationさせず、一定時間が経過した後invalidationさせます。_OPTIMIZER_INVALIDATION_PERIODパラメータは、この値を決定します。デフォルト値は18000(秒)(=5時間)です。つまり、統計情報の収集によって統計情報が変更された後、約5時間かけてランダムな時点に該当Cursorが実行されるとinvalidationが発生します。これを、Auto Invalidationと呼びます。一定時間にわたってランダムにCursorをInvalidationすることにより、特定の時点でHard Parseが一度に殺到する現象を回避することができます。
DBMS_STATSパッケージを利用して統計情報を収集する際NO_INVALIDATEオプションを利用してSQL Cursorがinvalidationされる時点を指定することができます。NO_INVALIDATEオプションの値によるinvalidation動作は以下の通りです。
・NO_INVALIDATE= False:統計情報の変更時に関連するSQL Cursorがすぐにinvalidationされます。 9iからのデフォルトです。 ・NO_INVALIDATE= True:統計情報の変更時に関連するSQL Cursorをinvalidationしません。 SQL CursorがShared PoolからFlushされた後、Reloadされる変更された統計情報が 反映されます。 ・NO_INVALIDATE= DBMS_STATS.AUTO_INVALIDATE:統計情報の変更時に関連するSQL Cursorを一定時間 (_OPTIMIZER_INVALIDATION_PERIOD)にかけて均等に(ランダムに)invalidationします。 10gでのデフォルトです。厳密に言えば、既存SQL Cursorをinvalidationさせるのではなく、 新しいChild Cursorを生成します。生成されたChild CursorをV$ SQL_SHARED_CURSORビューで 照会してみるとroll_invalid_mismatchによってMismatchが発生したものとして処理されることを 確認することができます。
注意
10gでの統計情報収集
Oracle10gからno_invalidateオプションのデフォルト値がDBMS_STATS.AUTO_INVALIDATEです。つまり、統計情報を再収集しても関連するSQL Cursorがinvalidateされなません。したがって、統計情報を反映して与えるにShared PoolをFlush(alter system flush shared_pool)しなければなりません。
統計情報の収集の基本的なガイドは、Oracleの基本的な行動様式(すなわちAuto invalidation)を使用しますが、特定のSQL CursorをすぐにinvalidationするSessionレベルで_OPTIMIZER_INVALIDATION_PERIODパラメータの値を減らすことです。
alter system set "_optimizer_invalidation_period" = 1;
関連情報
1. DBMS_STATSパッケージ