[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 メーリングリストの案内