・類似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;