2

この 1 つのストアド プロシージャには問題があります。このストアド プロシージャは、アプリケーション全体で 99% の時間動作しますが、アプリケーションの特定の部分から呼び出されるとタイムアウトになります。

テーブルには 3 つの列しかなく、約 300 のレコードが含まれています。ストアド プロシージャは 1 つのレコードのみを返し、次のようになります。

"Select * from Table Where Column = @parameter"

sp が管理スタジオで実行されると、00 秒かかります。

ストアド プロシージャはアプリケーションで頻繁に使用されますが、プログラムの特定の部分でのみタイムアウトするようです。このような単純な sp がタイムアウトする理由は考えられません。何か案は?

これは vb.net デスクトップ アプリケーションであり、SQL Server 2005 を使用しています。

4

4 に答える 4

6

既にテーブルをロックしているため、読み取れないコードがいくつかあります。

于 2010-02-10T21:04:03.003 に答える
3

試す

SELECT * FROM Table WITH (NOLOCK) WHERE Column = @parameter
于 2010-02-10T21:08:57.247 に答える
1

非常によく似た問題がありました。アプリケーションでタイムアウトを維持するいくつかのストアド プロシージャがありましたが (約 30 秒)、SSMS では正常に実行されました。

私たちが使用した短期的な解決策は、問題を一時的に修正するストアド プロシージャを再実行することでした。これで一時的に問題が解決する場合は、パラメータ スニッフィングの問題を調査する必要があります。

詳細については、http://dannykendrick.blogspot.co.nz/2012/08/sql-parameter-sniffing.html を参照してください

于 2012-08-13T06:06:02.670 に答える
0

パフォーマンス指標を取得する必要があります。SQLプロファイラーを使用して、SPがその時点で遅いかどうかを確認します。その時点で遅いのがSQLである場合は、クエリを強制的に待機させている可能性のあるロックなどを考慮してください。その時点で、より具体的な情報を提供できる場合があります。

SP ではなく VB コードと言う場合は、RedGate の AntsJetBrains のDotTrace のようなまともなプロファイルが役立つかもしれません。

于 2010-02-10T21:04:27.990 に答える