類似SQLの調査&Cursor_sharing

・類似SQLを調査しパラメータを使ったSQL文の再解析回避

  Oracleは同一のSQL文が実行された場合、2回目以降はSQL文の解析を行わないため、
  パフォーマンスが向上する。
  
  大文字小文字の相違、空白の数、改行の有無等一字一句異なっていては、同一とはみなさない。 
  ただし、Oracle8iから導入されたパラメータ、CURSOR_SHARINGをFORCEにすることで、
  多少のリテラルの違い程度ならば、バインド変数に自動置換してくれるので、 解析回数を減らすことが可能。 

  CURSOR_SHARING: デフォルト値はEXACT  ( SIMILAR  FORCE )

	  FORCE   :リテラルがわずかに異なっても、同一のSQLとして共有します。 
	  SIMILAR :実行計画が同一であれば、同一のSQLとして共有します。 
	  EXACT   :完全に同一のテキストを含むSQLのみ共有します。(デフォルト値)。

  Oracle8iでは ALTER SESSION・・・でCURSOR_SHARINGをFORCEにするとORA-600が発生するなどの問題が
  あったようで使用には十分注意が必要だと思います。
  Oracle9iは大丈夫そう???


・類似SQL文の抽出

   select count(HASH_VALUE)      COPIES
        , substr(sql_text,1,128) sql_text
     from v$sqlarea
    group by substr(sql_text,1,128)
    order by COPIES desc

・CURSOR_SHARINGを変更後はshared_poolをFLUSHする。

 
  ALTER SYSTEM SET CURSOR_SHARING=FORCE;
  ALTER SYSTEM FLUSH SHARED_POOL;