
OPTIM PEEK USER BINDS - 日本エクセム株式会社 Oracleパラメータ
目次[非表示]
基本情報
パラメータ情報
説明
Bind Variable Peeking(以下BVP。バインド変数のピーキング)機能を有効にするかどうかを決定します。BVPとBind変数を含むSQL文の最適化を実行するとき、Bind変数が指す値を参照することを意味しす。
Oracleは、BVPを介してSQL文の実行時Bind値を利用するので、最適な実行計画を策定することができます。
注意
Bind Variable PeekingとExplain Plan
BVPを使用する場合、Explain Planステートメントを介して確認した実行計画(Execution Plan)が、実際の運用環境では、適用されないことがあります。Explain Planステートメントでは、BVPが適用されないため、BVPが適用されたランタイムの実行計画とは異なる実行計画を報告する可能性があります。
もし、テスト環境では正常に実行されたSQL文が実行時に遅い場合、一次的にBVPによるサイドエフェクトがないか検証してなければなりません。ランタイムの実行計画は、V$ SQL_PLANビューで確認可能です。
Bind Variable PeekingとHistogram
BVPとHistogramの組み合わせにより、予期せぬパフォーマンスの問題が発生する場合がしばしばあります。次のような場合を例に挙げてみます。
上記のような状況でBVPが適用される場合は、次のような問題が発生します。
つまり、Historgramが生成されたColunmが傾いており、このColumnのBVPが適用されると、Bind変数の値に応じてパフォーマンスが一定しない問題が発生することになります。この問題の解決方法は以下の通りです。
Oracle10gとDBMS_STATSパッケージ
統計情報を収集するためにDBMS_STATSパッケージを使用している場合はMETHOD_OPTパラメータのDefault値により10gの予期せぬ問題が発生することがあります。
Oracle9iまではMETHOD_OPTパラメータのデフォルト値がFOR ALL COLUMNS SIZE1です。つまり、Histogramを生成しないことが基本方式となります。しかし、Oracle10gからこのパラメータのデフォルト値がFOR ALL COLUMNS SIZE AUTOに変更されました。つまり、Histogramの作成するかどうかをOracleが判断することになります。
これらのバージョン間の変化は、次のような状況で問題を起こすことがあります。
このような状況では、以前はHistogramがなかったカラムにHistogramが生成されることができ、このカラムにBVPが適用される場合、実行計画が変更されたSQL文のパフォーマンスが大幅に低下する現象が発生することがあります。この問題の解決方法は以下の通りとなります。
Oracle11gのBind-aware cursor matching
上記のBVPとHistogram問題のためBVP機能をオフにしまう場合が多くあります。幸いなことにOracle11gでHistogramによるサイドエフェクトの問題が解決されました。