4

永続性と Oracle データベースに Toplink を使用するアプリケーションがあります。最近、特に db/query レベルでパフォーマンスの問題が発生しました。私は一連のトリガーとストアド プロシージャに大きなロジックを持っていますが、これは不適切に記述されており、変更トリガーの問題に対する回避策があります。アプリケーションは数年前から実稼働しており、新しいリリースやその他の優先度の高い承認を取得する官僚機構を考慮すると、このコードを書き直すことが最後の解決策です。だから私は迅速な修正を探しています。

パフォーマンスを改善する 1 つの解決策は、バインド変数を使用することです。私の問題は、トップリンクの session.xml に bind-all-variables と cache-all-statements を追加した後、特定の UI で、くだらないコードをトリガーし、この構成を変更する前に問題なく機能していたときに、次のエラーが発生することです。

ORA-00036: 再帰SQLレベルの最大数(50)を超えました

私の質問は、bind-variable 設定を追加した後にのみこのエラーが表示されるのはなぜですか? くだらないコードを変更せずに、バインド変数で動作させるにはどうすればよいですか?

4

1 に答える 1

2

「変異トリガー問題の回避策付き」

これらの回避策のほとんどは、(a)特にうまく機能せず、(b)再帰SQLとしてカウントされる自律トランザクションを中心に展開しているため、これは恐ろしいことです。

一方、PL / SQLにロジックがあるということは、バインドを使用しないようにPL / SQLで多大な労力を費やす必要があるため、通常、問題はバインド変数ではないことを意味します。

この場合、変数の問題をバインドするよりも、変化するテーブルの回避策をしっかりとしたベースで対処/置換することに時間を費やしたほうがよいと思います。

于 2011-05-20T22:39:11.107 に答える