我有一个查询(大约1600行存储为存储过程),在SQL Server Management Studio中执行时需要大约3秒钟的时间执行(通过添加正确的索引进行优化后)。查询在SQL Server中直接在4秒内执行,但在ASP.NET中需要超过30秒?
我在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())
{
...
}
}
}
我的连接字符串是:
Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=true
我知道查询本身是好的,因为我碰到这里面SSMS多次,它工作得很好(下平均5秒)。而且,我很乐意提供更多的调试信息,除了我不知道该提供什么。
要解决这些问题,我会从哪里开始?
编辑:
我跑SQL事件探查器,并收集了一些统计数据。这就是我所观察到的。很奇怪,它是正在执行的确切查询。让我知道在这一点上我还有什么可以做的。
在哪条线和哪条线之间需要30秒? – 2013-02-26 20:35:46
@MikeChristensen:它停在'cmd.ExecuteReader()'处。 – Legend 2013-02-26 20:36:50
你是说SQL命令字符串是1600行,还是说它返回1600行? – RBarryYoung 2013-02-26 20:37:02