SQL Server 2000で発生している問題を理解しようとしています。中程度のトランザクションWebサイトでありsp_GetCurrentTransactions
、customerIDを受け入れるストアドプロシージャと2つの日付があります。
現在、日付と顧客に応じて、このクエリは0〜1000行の任意の行を返すことができます。
問題:私たちが経験したことはExecution Timeout Expired
、特定のクライアントがそのストアドプロシージャを実行しようとすると、突然(通常または同様の)多くのエラーが発生することです。そのため、クエリを調べてSSMSで実行すると、30秒かかることがわかります。したがって、ストアドプロシージャを再コンパイルすると、-bang-が300ミリ秒で実行されます。
私はこれについてDBAに話しました。彼は、ストアドプロシージャを作成したときにデータベースがクエリプランを作成したと言っています。彼は、そのパラメーターセットには良い計画であると言いましたが、特定のパラメーターセットをスローすると、そのデータに最適なプランではなくなるため、実行が遅くなります。
私に提示されたオプションは、問題のクエリをストアドプロシージャから、実行ごとに作成された実行プランを持つ動的SQLに戻すことです。
これは私に一歩後退したような気がし、これを回避する方法があるに違いないと感じています。この問題に対処する他の方法はありますか?
ありとあらゆる回答を歓迎します。