【问题标题】:Getting SQL Server timeout exception even with command timeout set to 0即使命令超时设置为 0,也会出现 SQL Server 超时异常
【发布时间】:2018-10-12 18:40:37
【问题描述】:

根据 SQL Server 中的文档,我已将命令超时设置为 0。我正在索引一个大表,但仍然收到异常“执行超时已过期”。在操作完成之前超时时间已过或服务器没有响应。当我通过 SQL Server Monitor 观察服务器时,服务器正在响应。

下面是相关代码:

private void ExecuteQuery(string qStr)
{
    using (SqlConnection cnx = new SqlConnection(_ConnectionString))
    {
        cnx.Open();

        using (SqlCommand cmd = new SqlCommand(qStr, cnx))
        {
            cmd.CommandTimeout = 0;
            cmd.ExecuteNonQuery();
        }
    }
}

这是连接字符串
Data Source='tcp:aplace.database.windows.net,1433';Initial Catalog='SQL-Dev';User Id='user@place';Password='password';Connection Timeout=360

为什么会出现执行超时?我也将连接超时设置为 7200 秒。我正在为一列上的 3100 万行表建立索引。

【问题讨论】:

  • 澄清一下,您是通过这个 SqlCommand 创建索引吗?如果是这样,构建索引是否需要 2 个多小时?
  • 不,不是。我只是告诉你这个限制。上面的消息很快就失败了。
  • 30 秒左右是否“非常快”?
  • 其实非常接近30秒。我认为 CommandTimeout = 0 会覆盖它!
  • 它通常应该。你能发布你的连接字符串吗?

标签: c# sql-server azure-sql-database


【解决方案1】:

首先,连接超时和命令超时不是一回事。确保您了解其中的区别并正确使用它们。

其次,如果这是来自网页,您还需要考虑与网络服务器等相关的超时值。

第三,为了验证它实际上是一个超时问题,在 SSMS 中执行你的索引语句并找出它需要多长时间。由于无论从何处调用,实际索引都发生在 SQL 服务器上,因此无论是从 SSMS 还是您的应用程序运行,索引时间都应该大致相等。

【讨论】:

  • 不是网络。有时有效。如果您发出 C# sql 查询来索引服务器上的列,会发生什么超时?它应该做索引并返回。你怎么知道你第一次做需要多长时间?
  • 您应该在 SQL Server Management Server(以前称为查询分析器)中运行查询。这将告诉您需要多长时间。这是错误消息的全文吗?如果没有,请发布全文,包括任何错误号等。如果有堆栈跟踪,也请发布。
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多