AWR を分析中です。
Soft Parse が異常に高いので調べてみました。
基本的には、SQL実行時には必ずパース(解析)が必要になります。
では、Parse しなくてよいのはどんなときか?
- セッション・カーソル・キャッシュの機能により、セッションメモリにカーソルの情報がキャッシュされている残っている場合。
初期化パラメータ SESSION_CACHED_CURSORS でキャッシュ可能なカーソル数が設定できます。11.2.0.4 だとデフォルト 50。
なので、SQL実行時の解析処理は以下の順で行われます。
- セッション・カーソル・キャッシュを確認 (Parse なし)
- なければ ライブラリ・キャッシュを確認 (Soft Parse)
- なければ SQL を解析 (Hard Parse)
各ヒット率はインスタンス統計から確認できます。
- セッション・キャッシュのヒット率:
session cursor cache hits / parse count(total) - ソフト・パース率:
(parse count(total) - session cursor cache hits - parse count(hard)) / parse count(total) - ハード・パース率:
parse count(hard) / parse count(total)