5

我有一个简单的 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
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 会话下执行的计划进行比较(只需单击工具栏中的显示实际计划)。

而且,作为一般规则,始终尝试应用有条不紊的方法而不是猜测。等待和队列是一种非常好的、经过验证的 SQL Server 性能故障排除方法。

于 2010-06-18T17:12:08.880 回答