C#和SQL Server Management Studio中SQL查询的执行时间差异很大

Pau*_*aul 5 c# sql sql-server timeout execution-time

我有一个简单的SQL查询,当从C#运行时需要超过30秒,然后每次超时,而在SQL Server Management Studio上运行时立即成功完成.在后一种情况下,查询执行计划不会显示任何麻烦,并且通过一些简单的操作可以很好地传播执行时间.

EXEC sp_who2在查询从C#运行时运行' ',它被列为占用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
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 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>
Run Code Online (Sandbox Code Playgroud)

然后将其与在SSMS会话下执行的计划进行比较(只需单击工具栏中的显示实际计划).

并且,作为一般规则,总是尝试应用有条理的方法而不是猜测.Wait and Queues是一种非常好的,经过验证的SQL Server性能故障排除方法.