超时

2013-07-24 39 views
1

我们正在试图解决一些数据库服务器超时,我能够将其降低到以下几点:超时

SqlConnection con = new SqlConnection("*connectionstring*"); 
con.Open(); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 
var sql = "select top 10 a.id from idx a inner join docs b on a.id=b.id " + 
    "where b.status in ('X','Y','Z') and [email protected] and a.name like @Name " + 
    "order by a.id"; 
cmd.CommandText = sql; 
cmd.Parameters.Clear(); 
cmd.Parameters.AddWithValue("@SC","NC"); 
cmd.Parameters.AddWithValue("@Name","%ZZZ%"); 
DateTime before = DateTime.Now; 
using (SqlDataReader r = cmd.ExecuteReader()) { 
    while (r.Read()) { 
    } 
} 
DateTime after = DateTime.Now; 
Console.WriteLine("Before: " + before.ToString()); 
Console.WriteLine("After: " + after.ToString()); 
Console.WriteLine(after - before); 
con.Close(); 

以上时间在ExecuteReader语句中。

如果我将参数值“%ZZZ%”更改为“%SMITH%”,它几乎立即恢复。更好的是,如果我删除命令参数并将CommandText语法更改为纯sql,即 - “...其中sc ='NC'并且名称像'%ZZZ%'”,那么也会在之后几乎立即返回。

有什么想法?我不知所措,并且找不到其他人遇到类似问题的其他线索。提前致谢!

**更新#1:我们能够使用小型Java控制台应用程序复制相同的功能,因此它看起来不是.Net或驱动程序问题。

**更新#2:这是一个非常类似的问题提出的问题here。不完全相同的原因,但效果相同。

+0

你碰巧搞清楚发生了什么?我正在寻找似乎是相同问题的东西,而且我在配置文件中看不到很多东西。 –

回答

0

我建议你尝试使用Sql Server Profiler来剖析服务器查询。你可能会在那里得到一些线索。

+0

好想法。我捕获了一个坏的和好的处决的痕迹。跟踪中它们是完全相同的,除了传递值之外。不过,它必须是SQL Server的问题,因为我们也可以在一个小的Java项目中复制这个问题。 – Bryan

+0

很高兴能帮到你。 :) – Crono