SELECT从程序中超时,但可以从SQL Server Management Studio运行

时间:2015-06-20 23:11:26

标签: c# sql sql-server

执行SQL SELECT时出现超时。

我连接到数据库:

using (SQLConnection conn = SQLConnection(@"Data Source=mydbServer;Initial Catalog=mydb;Integrated Security=true;Timeout=180");
{
    conn.Open();

并成功连接。

在使用{}内部设置:

string query = @"SELECT a.field, a.timestamp " +
               "FROM mydb.dbo.myTable1 a WITH(NOLOCK) " +
               "LEFT JOIN [myOtherdbServer].myOtherdb.dbo.MyTable2 b WITH(NOLOCK) " +
               "ON a.field = b.field " +
               "WHERE b.field is NULL " +
               "AND a.timestamp >= '2015-05-01 00:00:00.000' " +
               "AND a.timestamp < '2015-06-01 00:00.00.000'";

并执行命令:

using (SQLCommand queryCmd = new SQLCommand(query, conn)
{
    queryCmd.CommandTimeout = 300;

    using (SQLDataReader rdr = queryCmd.ExecuteReader())
    { 

SQLCommand抛出超时异常:“操作完成之前经过的超时时间或服务器没有响应”。

如果我在运行我的程序的同一系统上使用SQL Server Management Studio,并且作为运行我的程序的同一用户,并执行相同的SELECT,它将在1秒内完成并返回数千行。

现在这种情况一直在发生。几天前它正在运作。我应该寻找什么?我很困惑,因为相同的SELECT可以从SQL Server Management Studio运行。 SQL SMS是否使用不同的连接?

1 个答案:

答案 0 :(得分:4)

&#34;如果我在运行我的程序的同一系统上使用SQL Server Management Studio,并且作为运行我的程序的同一用户,并执行相同的SELECT,则完成在1秒内返回几千行。&#34;

  1. 为什么SQL Server Management Studio中的执行时间更好可能有几个原因。一次,结果是Cached,也可能是您在时间戳列上缺少索引
  2. 另外,您的应用服务器是否与您的sql server位于同一服务器上?如果不是,这可能会增加延迟并导致超时。
  3. 链接服务器可能是一个问题,除了延迟考虑因素,我不确定NOLOCK语句是否足以确保您尝试在远程服务器上实现的目标。您可能需要在包含NOLOCK语句的远程服务器上创建视图。
  4. 现在这种情况一直在发生。几天前它正在运作。我应该寻找什么?我感到困惑,因为相同的SELECT适用于SQL Server Management Studio。 SQL SMS是否使用不同的连接?

    通常当某些东西工作但现在它已经停止工作时,就会发生一些变化。开始进行故障排除,直到找到它为止,寻找索引更改,代码架构修改,甚至是Windows更新,任何可能带给您领导的东西,直到您能够恢复它为止。

    其他建议, 尝试将select语句限制为TOP 10,只是为了看到你能够获得结果,这可能表明问题出在对象的大小/查询执行时间,而不是你的服务器/应用程序配置。

相关问题