Gblog

おもにTips

Soft Parse / Hard parse

AWR を分析中です。

Soft Parse が異常に高いので調べてみました。

 

基本的には、SQL実行時には必ずパース(解析)が必要になります。

  • 共有プールに解析済みの SQL がある場合 ⇒ Soft Parse 
  • 共有プールに解析済みの SQL が無い場合 ⇒ Hard Parse

では、Parse しなくてよいのはどんなときか?

  • セッション・カーソル・キャッシュの機能により、セッションメモリにカーソルの情報がキャッシュされている残っている場合。

初期化パラメータ SESSION_CACHED_CURSORS でキャッシュ可能なカーソル数が設定できます。11.2.0.4 だとデフォルト 50。

 

なので、SQL実行時の解析処理は以下の順で行われます。

  1. セッション・カーソル・キャッシュを確認 (Parse なし)
  2. なければ ライブラリ・キャッシュを確認 (Soft Parse)
  3. なければ 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)