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 a.sc=@SC 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,即-"... where sc='NC' and name like '%ZZZ%'",它几乎立即返回。

有什么想法吗?我很茫然,找不到人们遇到类似问题的任何其他线程。提前致谢!

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

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

4

1 回答 1

0

我建议您尝试使用 Sql Server Profiler 来分析服务器查询。你可能会从中得到一些线索。

于 2013-07-24T16:50:29.103 回答