[Seasar-user:5092] Re: [S2Dao]SQL のスタックトレース取得について

Yasuo Higa [E-MAIL ADDRESS DELETED]
2006年 11月 14日 (火) 14:56:26 JST


ひがです。

> お世話になっています。森下と申します。
> 
> S2DaoでSQLを発行しているのですが
> SQLのスタックトレースを取得する方法がわかりません。
> 
> ※コンソールに表示されているものでなく、
>   実際にDBに対して発行しているSQLです。
> 
> コンソールに表示されているSQLを実行すると
> 結果が早く返ってくるのですが、S2Daoを通して
> SQLを実行すると極端に遅い現象が発生しているため、
> SQLのスタックトレースを出力したいと思った次第です。
> 
> なお、SQLはバインド変数を使用しています。
> 
> 環境は以下となります。
> S2Dao 1.0.28
> S2    2.2.10
> DB    Oracle9.2.0
> 
バインド変数がバインドされる前のSQLは、ほぼSQLファイルと同じものです。

コンソールに表示されているSQLを実行すると
結果が早く返ってくるのですが、S2Daoを通してSQLを実行すると
極端に遅い現象が発生するというのは、
バインド変数によって実行プランが変わってしまうためです。

これに対応するためには、ヒントを使って特定のインデックスを
使うようにするか、埋め込み変数(/*$ ... */)を
使って変数を直接文字列としてSQLに埋め込んでください。
変数が文字列の場合は、''で囲むことも必要です。
なお、埋め込み変数を使った場合には、SQLインジェクション対策を
自前でしてください。
実行プランに関係のなさそうな項目を1つぐらい選んで普通のバインド変数に
すれば、SQLインジェクション対策は不要です。

よろしくお願いします。

Yasuo Higa
The Seasar Project



Seasar-user メーリングリストの案内