SqlDataReader зависает на методе GetValue() и SNIReadSyncOverAsync
У нас под рукой очень странная проблема. Объект.Net SqlDataReader застревает при чтении значения в методе GetValue(). Исключений нет, и время ожидания не превышает 10 минут, что действительно много времени. После более чем 10 минут выдает эту ошибку:
Общее исключение -!ET:SqlException{CRLF}!M: истекло время ожидания. Период ожидания истек до завершения операции, или сервер не отвечает.{CRLF} Общее исключение -!ET:Win32Exception{CRLF}!M: Время ожидания операции ожидания истекло {CRLF}!
Трассировка стека, полученная посредством дампа процесса.
000000001b2ee6f8 0000000076eabe7a [InlinedCallFrame: 000000001b2ee6f8].SNIReadSyncOverAsync (SNI_ConnWrapper *, SNI_Packet **, Int32) 000000001b2ee6f8 000007fef35a3ab1 [InlinedCallFrame: 000000001b2ee6f8].SNIReadSyncOverAsync (SNI_ConnWrapper *, SNI_Packet **, Int32) 000000001b2ee6d0 000007fef35a3ab1 DomainBoundILStubClass.IL_STUB_PInvoke (SNI_ConnWrapper *, SNI_Packet **, Int32) 000000001b2ee7a0 000007fef358a35f SNINativeMethodWrapper.SNIReadSyncOverAsync (System.Runtime.InteropServices.SafeHandle, IntPtr ByRef, Int32) 000000001b2ee810 000007fef358a07e System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync () 000000001b2ee8c0 000007fef3589f90 System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket () 000000001b2ee900 000007fef358a760 System.Data.SqlClient.TdsParserStateObject. m.Data.SqlClient.TdsParser.TryGetDataLength(System.Data.SqlClient.SqlMetaDataPriv, System.Data.SqlClient.TdsParserStateObject, UInt64 ByRef) 000000001b2ee9c0 000007fef359dce3 System.Data.SqlClient.TdsParser.TryProcessColumnHeaderNoNBC(System.Data.SqlClient.SqlMetaDataPriv, система.Data.SqlClient.TdsParserStateObject, Boolean ByRef, UInt64 ByRef) 000000001b2eea40 000007fef359da4c System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(Int32, Boolean) 000000001b2eeae0 000007fef359d900 System.Data.SqlClient.SqlDataReader.TryReadColumn(Int32, Boolean, Boolean) 000000001b2eeb50 000007fef359d81b System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32) 000000001b2eeb90 000007fef359d7c7 System.Data.SqlClient.SqlDataReader.GetValue(Int32)
Это, безусловно, не проблема блокировки базы данных, потому что мы увидели, что она проходит метод ExecuteReader(). Мы также видим в профилировщике SQL, что оригинальная команда успешно выполнена. Только при переборе записей и чтении значений он застревает. Это происходит случайно каждые 10-15 дней.
Кто-нибудь сталкивался с такой проблемой раньше? Что может быть причиной?
Я уже в стеке потока потока, но он не предложил решение. Может ли это быть проблема с сетевым подключением? Почему это не тайм-аут?