SqlDataReader挂起GetValue()方法和SNIReadSyncOverAsync

时间:2017-02-03 03:05:24

标签: .net sql-server sqldatareader sqlclient executereader

我们手头有一个非常奇怪的问题。在GetValue()方法上读取值时,.Net SqlDataReader对象会卡住。没有例外,它不会超时至少超过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.TryPrepareBuffer()   000000001b2ee930 000007fef358d8cb   System.Data.SqlClient.TdsParser.TryGetTokenLength(字节,   System.Data.SqlClient.TdsParserStateObject,Int32 ByRef)   000000001b2ee980 000007fef359de78   System.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,   System.Data.SqlClient.TdsParserStateObject,Boolean ByRef,UInt64   ByRef)000000001b2eea40 000007fef359da4c   System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(的Int32,   布尔)000000001b2eeae0 000007fef359d900   System.Data.SqlClient.SqlDataReader.TryReadColumn(Int32,Boolean,   布尔)000000001b2eeb50 000007fef359d81b   System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32)已   000000001b2eeb90 000007fef359d7c7   System.Data.SqlClient.SqlDataReader.GetValue(Int32)已

这肯定不是数据库锁定问题,因为我们观察到它是通过ExecuteReader()方法。我们还可以在SQL profiler中看到原始命令已成功完成。只有在迭代记录和读取值时才会卡住它。这种情况每10-15天随机发生一次。

以前有人遇到这样的问题吗?可能是什么原因?

我已经stackoverflow thread但它没有提供解决方案。这可能是网络连接问题吗?为什么不超时?

0 个答案:

没有答案