2013-05-21 37 views
5

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

Trả lời

3

Điều này đã được giải quyết và vấn đề cuối cùng hóa ra là sự cố với internet của khách hàng. Tôi không có tất cả các chi tiết nhưng BT đã tìm thấy một vấn đề tại sàn giao dịch và một khi điều này đã được sửa thì chương trình bắt đầu hoạt động trở lại.

2

Dưới đây là một cái gì đó để thử. Here is an article on MSDN Blog cho thấy 2 điều:

Long running task or uncommited transaction 

30 giây là một giá trị mặc định cho khách hàng SQL của bạn phải chờ đợi. Nó làm cho máy khách của bạn hết thời gian chờ. Có thể tốc độ truyền dữ liệu thực tế cho kết nối này cho khách hàng của bạn quá chậm để có được tất cả các hàng trong thời gian không? Có thể một quy trình khác sẽ đóng kết nối này và thời gian Khách hàng chờ phản hồi?

+0

Đ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

+0

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

+0

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

2

Đánh giá từ các độ phân giải bởi những người khác đã có (hơi) vấn đề tương tự, điều này hầu như luôn luôn hóa ra là một trong ba điều:

  1. hỏng hoặc thất bại đĩa (s). Sử dụng CHKDSK /r để giải quyết vấn đề này.

  2. Một NIC xấu, hoặc

  3. vấn đề DHCP, đặc biệt là với các Hết hạn thuê/Renewal.

Tôi không biết bất kỳ trường hợp nào nó trở thành bất kỳ điều gì cụ thể cho SQL Server.

Các vấn đề liên quan