首页 > 编程 > .NET > 正文

[20140504] ADO.NET客户端超时

2024-07-21 02:50:13
字体:
来源:转载
供稿:网友
[20140504] ADO.NET客户端超时背景: 最近总是出现客户端超时,那么根据超时进行排查 System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed PRior to completion of the Operation or the server is not responding.原理: 客户端组件超时,一般分为Connection TimeOut 和Command Timeout 超时主要有以下几方面: 1.从连接池获取一个连接超时 2.创建一个新的连接超时 3.发送一个命令(Command)到数据库超时 4.使用带有context connection=true的属性连接发送命令(Command)到数据库超时。 5.当不是显示的发送命令(implicitly)到数据库超时。 6.执行异步命令时超时 7.从服务端获取记录时超时 8.使用bulk copy时超时。 上面8个,最有前面2个是属于Connection Timeout,其他都是Command Timeout。分析: 从错误来看就是Command Timeout报出的错误,客户端的Command Timeout生成环境下的设置时默认的也就是30秒。 在数据库监控层,我们设置了XEVENT对超过10s的查询监控,还有手写的堵塞超过10s的监控,中间并没有发现有堵塞情况。 那么可以排除掉6,在执行命令时超时。 并且不使用context connection=true那么可以排除掉4,带有context connection=true属性发送Command命令。 也不会使用bulk copy,所以第8点也可以排除。 通过sys.dm_os_ring_buffers也没有发现sql server主动断开连接。结论: 那么可以认为是客户端在获取结果或者发送命令的时候,发生的超时。参考:《SQL Server 2012实施与管理实战指南》 第4章,第6章
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表