[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章
posted on 2014-05-04 09:35  Fanr_Zh 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Amaranthus/p/3706085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值