【问题标题】:SQL Server 2012 Remote connection giving Timeout and ASYNC_NETWORK_IO errorsSQL Server 2012 远程连接出现超时和 ASYNC_NETWORK_IO 错误
【发布时间】:2013-05-16 11:51:32
【问题描述】:

我在连接到 SQL Server 2012 远程实例的服务时遇到问题。

.NET 2.0 服务在客户端计算机上运行,​​它使用 TCP/IP 连接到当前正在运行 SQL Server 2012 实例的远程 Web 服务器。Web 服务器曾经是 Windows Server 2003 和 SQL Server 2005,以及6个月前升级没有任何问题。然后该服务会检查是否有任何需要下载的数据。

客户端机器

  • Windows Server 2003

网络服务器

  • Windows Server 2012
  • SQL Server 2012

这已经运行了 5 年多,直到上周五突然停止工作并给出以下错误日志消息

Event Type: Warning
Event Source:   
Event Category: None
Event ID:   0
Date:       21/05/2013
Time:       16:45:11
User:       N/A
Computer:   
Description:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
   at System.Data.SqlClient.TdsParserStateObject.ReadByteArray(Byte[] buff, Int32 offset, Int32 len)
   at System.Data.SqlClient.TdsParserStateObject.ReadUInt32()
   at System.Data.SqlClient.TdsParser.ReadSqlValueInternal(SqlBuffer value, Byte tdsType, Int32 typeId, Int32 length, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ReadColumnData()
   at System.Data.SqlClient.SqlDataReader.ReadColumnHeader(Int32 i)
   at System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
   at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
   at RedBlack.Data.Synchronisation.SyncManager.UpsertRecords(String sourceSelect, String destTable, String[] destFields, List`1 relations)
   at General.CyPro.Application.WebSynchronisation.SyncRoutines.FetchOrders(UpsertFlags upsertOptions)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at RedBlack.CyPro.Application.WebSynchronisation.Job.Run(Object[] args)
...
System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
   at System.Data.SqlClient.TdsParserStateObject.ReadByteArray(Byte[] buff, Int32 offset, Int32 len)
   at System.Data.SqlClient.TdsParserStateObject.ReadUInt32()
   at System.Data.SqlClient.TdsParser.ReadSqlValueInternal(SqlBuffer value, Byte tdsType, Int32 typeId, Int32 length, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ReadColumnData()
   at System.Data.SqlClient.SqlDataReader.ReadColumnHeader(Int32 i)
   at System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
   at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
   at RedBlack.Data.Synchronisation.SyncManager.UpsertRecords(String sourceSelect, String destTable, String[] destFields, List`1 relations)
   at General.CyPro.Application.WebSynchronisation.SyncRoutines.FetchOrders(UpsertFlags upsertOptions)

我检查了网络服务器上的活动监视器,当查询运行时,它被挂起,WAIT_TYPE 为 ASYNC_NETWORK_IO。

我已经运行了它试图在 Management Studio 中手动运行的查询,它在远程连接到 Web 服务器实例的客户端服务器上运行了大约 40 秒,返回了 2600 多行,然后它给了我以下错误

Msg 121, Level 20, State 0, Line 0
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

我在 Management Studio 中远程连接到 Web 服务器实例的机器上运行了相同的查询,它在 0.312 秒内返回完整的 4000 行。

我在试图弄清楚这一点时不知所措,因为在我看来这是某种网络问题。客户的硬件技术人员检查了网络,并表示一切正常。

如果您需要更多信息,请告诉我

谢谢

【问题讨论】:

    标签: .net sql-server networking sql-server-2012 tcp-ip


    【解决方案1】:

    从遇到(有些)类似问题的其他人的解决方案来看,这几乎总是成为以下三件事之一:

    1. 磁盘损坏或故障。使用CHKDSK /r 来解决这个问题。

    2. 网卡坏了,或者

    3. DHCP 问题,尤其是租约到期/续订。

    我不知道有任何情况表明它是特定于 SQL Server 的。

    【讨论】:

      【解决方案2】:

      这个问题已经解决了,问题最终证明是客户端互联网的问题。我没有所有详细信息,但 BT 在交易所发现了一个问题,一旦解决了这个问题,程序就会重新开始工作。

      【讨论】:

        【解决方案3】:

        这里有一些东西可以尝试。 Here is an article on MSDN Blog 暗示了两件事:

        Long running task or uncommited transaction
        

        30 秒是您的 SQL 客户端等待的默认值。它使您的客户端机器超时。 可能是您的客户端的此连接的实际数据传输速度太慢而无法及时获取所有行? 也许另一个进程关闭了这个连接,客户端等待响应时间?

        【讨论】:

        • 这解决了超时错误但没有解决根本问题,错误日志消息已更改为A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)而不是超时错误。客户的网速确实很慢,但他们的连接速度已经 6 年了,他们正在让他们的宽带供应商检查连接。
        • 您是否检查过在此之前对 Web 服务器所做的更改?可能是补丁或升级,或设置更改?或者您的客户端机器可能已升级/更改?
        • 信号量超时 - 是较低级别的超时 - 可能在网络或文件系统级别。您可以运行DBCC CHECKTABLE MyTable 来查看您的表是否正常,但是您可以在您的机器上正常运行脚本,问题出在您的数据库之外。
        猜你喜欢
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多