vấn đề tôi đang trải qua với một dịch vụ kết nối với một trường hợp từ xa của SQL Server 2012.SQL Server 2012 kết nối từ xa cho Timeout và ASYNC_NETWORK_IO lỗi
Các dịch vụ NET 2.0 chạy trên máy khách hàng và nó kết nối sử dụng giao thức TCP/IP đến một máy chủ web từ xa hiện đang chạy một phiên bản SQL Server 2012. Máy chủ web đã từng là Windows Server 2003 và SQL Server 2005 và đã được nâng cấp 6 tháng trước mà không gặp bất kỳ sự cố nào. Dịch vụ sau đó kiểm tra xem có bất kỳ dữ liệu nào cần tải xuống hay không.
Khách hàng Máy
- Windows Server 2003
Web Server
- Windows Server 2012
- SQL Server 2012
này đã được chạy tốt cho 5 năm cho đến thứ sáu tuần trước khi nó đột nhiên ngừng làm việc và nó đưa ra thông điệp log lỗi sau
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)
Tôi đã kiểm tra giám sát hoạt động trên máy chủ web và khi truy vấn được chạy nó là bị tạm ngưng với WAIT_TYPE của ASYNC_NETWORK_IO.
Tôi đã chạy truy vấn mà nó đang cố gắng chạy thủ công trong Management Studio trên máy chủ khách hàng kết nối từ xa với cá thể máy chủ web và chạy trong khoảng 40 giây trở về 2600+ hàng trước khi nó cung cấp cho tôi lỗi sau
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.)
Tôi đã chạy cùng truy vấn trên máy của mình trong Management Studio kết nối từ xa với cá thể máy chủ web và trả về 4000 hàng trong 0,12 giây.
Tôi đang gặp khó khăn khi cố gắng tìm ra điều này vì dường như tôi là một vấn đề về mạng nào đó. Các kỹ thuật viên phần cứng của khách hàng đã kiểm tra mạng và đã nói rằng mọi thứ đều tốt như xa như họ đang quan tâm.
Nếu bạn cần thêm bất kỳ thông tin cho tôi biết
Cảm ơn
Điều này đã giải quyết được lỗi hết thời gian chờ nhưng không phải là vấn đề cơ bản, thông báo nhật ký lỗi đã thay đổi thành 'Một lỗi mức vận tải đã xảy ra khi nhận kết quả từ máy chủ. (nhà cung cấp: Nhà cung cấp TCP, lỗi: 0 - Thời gian hết hạn semaphore đã hết hạn.) 'chứ không phải là lỗi hết thời gian chờ. Các khách hàng có internet chậm nhưng họ đã có tốc độ kết nối tương tự trong 6 năm, họ đang nhận được nhà cung cấp băng thông rộng của họ để kiểm tra kết nối vào lúc này. – Croberts
Bạn đã kiểm tra các thay đổi được thực hiện cho máy chủ web ngay trước khi được phân loại này chưa? Có thể là bản vá hoặc bản nâng cấp hay thay đổi cài đặt? Hoặc có thể máy khách của bạn đã được nâng cấp/thay đổi? – Stoleg
Thời gian chờ của semaphore - là thời gian ở mức thấp hơn - có thể ở cấp độ mạng hoặc hệ thống tệp. Bạn có thể chạy 'DBCC CHECKTABLE MyTable' để xem bảng của bạn có ổn không, nhưng bạn có thể chạy kịch bản từ máy của mình, vấn đề nằm ngoài cơ sở dữ liệu của bạn. – Stoleg