約70個のパラメータを使用した更新クエリがときどきタイムアウトするという問題があります。いくつかの調査に基づくと、これはパケットスニッフィングによるものだと思います。新しいバージョンのSQLServerではこのOption(recompile)
句を使用できますが、サーバー2000を使用しているため、私の場合は機能しません。
sqlhelper.executeNonQuery
ストアドプロシージャではなく、使用しています。
約70個のパラメータを使用した更新クエリがときどきタイムアウトするという問題があります。いくつかの調査に基づくと、これはパケットスニッフィングによるものだと思います。新しいバージョンのSQLServerではこのOption(recompile)
句を使用できますが、サーバー2000を使用しているため、私の場合は機能しません。
sqlhelper.executeNonQuery
ストアドプロシージャではなく、使用しています。
私の知る限り、 のような「すぐに使える」方法はありませんがOption(recompile)
、オプティマイザをだます方法を見つけたのを覚えています。すべてではなく、実際に外部でクエリに渡しているパラメータのみを盗聴しているようです。したがって、実行しようとすると
SELECT MyField1, MyField2 FROM MyTable WHERE MyOtherField = @MyParm
パラメータのスニッフィングは発生しますが、次のように書くと
DECLARE @MyUnsniffableParm varchar(30)
SET @MyUnsinffableParm = @MyParm
SELECT MyField1, MyField2 FROM MyTable WHERE MyOtherField = @MyUnsniffableParm
もちろん、スクリプトにパラメーターのみを渡し@MyParm
ます。パラメーターのスニッフィングは発生しないようです。教えてください 私の記憶が正しければ、試すべき SQL 2000 インスタンスがありません!
編集:
他の何かがここで同じことをしているように見えます: http://blogs.msdn.com/b/khen1234/archive/2005/06/02/424228.aspx
簡単な修正は、パラメーターを使用しないことです。それ以外の:
SELECT * FROM YourTable WHERE UserName = @myUserName;
合格:
SELECT * FROM YourTable WHERE UserName = 'PFranchise'
SQL Server がパラメータを認識していない場合、それらを盗聴することはできません! SQL Server は、クエリごとにクエリ プランを再コンパイルします。
このアプローチに関する 2 つの注意事項: