我有一个简单的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) 在SQL Server Management Studio中执行时,我有一个查询(大约1600行存储为存储过程),执行大约需要3秒(在通过添加正确的索引进行优化之后).
我在C#中为此编写了一个包装器,并为自己提供了使用URI来执行此查询的能力.但是,这需要超过30秒的时间来执行,因此,当我将此查询作为循环的一部分运行时,由于过多的待处理请求,浏览器会停止.我写了这样的包装器:
try
{
string ConString = Constants.connString;
using (con = new SqlConnection(ConString))
{
cmd = new SqlCommand(sql, con);
con.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的连接字符串是这样的:
Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=true
Run Code Online (Sandbox Code Playgroud)
我知道查询本身很好,因为我在SSMS中多次运行它并且工作正常(平均5秒以下).而且,我很乐意提供更多的调试信息,除了我不知道提供什么.
要解决这些问题,我将从哪里开始?
编辑:
我运行了SQL Profiler并收集了一些统计信息.这就是我所观察到的.非常奇怪,它是正在执行的确切查询.让我知道在这一点上我还能做些什么.
