簡體   English   中英

SQL Server 2012遠程連接給出Timeout和ASYNC_NETWORK_IO錯誤

[英]SQL Server 2012 Remote connection giving Timeout and ASYNC_NETWORK_IO errors

我遇到連接到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)

我已經檢查了Web服務器上的活動監視器,並且在運行查詢時,它使用WAIT_TYPE ASYNC_NETWORK_IO暫停。

我已經運行查詢,它試圖在遠程連接到Web服務器實例的客戶端服務器上的Management Studio中手動運行它運行大約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行。

我無法想象這一點,因為在我看來,這是一種網絡問題。 客戶硬件技術人員檢查了網絡,並表示一切都很好,只要他們擔心。

如果您需要更多信息,請告訴我

謝謝

這已經解決,最終問題最終成為客戶互聯網的問題。 我沒有所有的細節,但BT在交易所發現了一個問題,一旦修復了,程序就開始重新運作了。

這是值得一試的。 這是MSDN博客上的一篇文章,它提出了兩件事:

Long running task or uncommited transaction

30秒是SQL客戶端要等待的默認值。 它使您的客戶端計算機超時。 可能是您的客戶端此連接的實際數據傳輸速度太慢,無法及時獲取所有行? 也許另一個進程關閉此連接,客戶端等待響應?

從具有(有些)類似問題的其他人的決議來看,這幾乎總是證明是三件事之一:

  1. 磁盤損壞或故障。 使用CHKDSK /r來解決這個問題。

  2. 一個糟糕的NIC,或

  3. DHCP問題,特別是租約到期/續訂。

我不知道有什么案例證明它是SQL Server的特定內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM