3

我们手头有一个非常奇怪的问题。.Net SqlDataReader 对象在读取 GetValue() 方法上的值时卡住。没有例外,它不会超时至少超过 10 分钟,这真的很长。超过 10 分钟后,它会抛出此错误:

一般异常 - !ET:SqlException{CRLF}!M:Timeout 已过期。在操作完成之前超时时间已过或服务器没有响应。{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.TdsData.SqlClient.MetaLength(SqlLength,System.Data.SqlClient.MetaLength( 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, 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 天随机发生一次。

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

我已经stackoverflow 线程,但它没有提供解决方案。会不会是网络连接问题?为什么不超时?

4

0 回答 0