5

C# から実行すると 30 秒以上かかり、毎回タイムアウトする単純な SQL クエリがありますが、SQL Server Management Studio で実行するとすぐに正常に完了します。後者の場合、クエリの実行計画では問題は何も明らかにならず、実行時間はいくつかの単純な操作によって適切に分散されます。

クエリが C# から実行されているときに' EXEC sp_who2' を実行しましたが、29,000 ミリ秒の CPU 時間を消費していると表示され、何によってもブロックされません。

これを解決する方法がわかりません。誰か洞察力がありますか?

クエリは次のとおりです。

SELECT
    c.lngId,
    ...
FROM tblCase c
    INNER JOIN tblCaseStatus s ON s.lngId = c.lngId
    INNER JOIN tblCaseStatusType t ON t.lngId = s.lngId
    INNER JOIN [Another Database]..tblCompany cm ON cm.lngId = cs.lngCompanyId
WHERE t.lngId = 25
    AND c.IsDeleted = 0
    AND s.lngStatus = 1
4

1 に答える 1

5

まず、C# から実行したときのクエリのクエリ プランを抽出します。

select p.query_plan, *
from sys.dm_exec_requests r
cross apply sys.dm_exec_query_plan(r.plan_handle) p
where r.session_id = <spid of C# connection>

次に、SSMS セッションで実行された計画と比較します (ツールバーで [実際の計画を表示] をクリックするだけです)。

そして、原則として、推測ではなく、常に系統だったアプローチを適用するようにしてください。Wait and Queuesは、SQL Server の優れた実績のあるパフォーマンス トラブルシューティング方法です。

于 2010-06-18T17:12:08.880 に答える