[20140504] ADO.NET客户端超时

简介: 背景:      最近总是出现客户端超时,那么根据超时进行排查      System.Data.SqlClient.SqlException (0x80131904): Timeout expired.
背景:
     最近总是出现客户端超时,那么根据超时进行排查
     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章
目录
相关文章
|
SQL 数据库连接 数据库
一起谈.NET技术,详细述说ADO超时相关问题介绍
  在使用连接ADO超时。其混合了函数语言和物件导向程序编制语言,并且完美的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。   使连接ADO超时     活动的突然增长可能使数据库服务器变得十分笨拙,大量增加建立数据库连接的时间。
805 0
|
前端开发 .NET
一起谈.NET技术,Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接
  server-push技术已经面世很久了,但直到GTALK的诞生才慢慢的引导出这项技术,不过到现在为止,也很少有人去应用这方面的技术,server-push倒底是一个什么样的东西呢?   故名思义,server-push即“服务器推”的意思,ajax大家都用过,它和server-push是完全相反的两个东西,ajax是从服务器端拉取数据,如果要定期更新页面上显示的数据块,那么最简单的方法就是写个计时器,server-push则不同,它的本质是将client与server建立一个长连接,即连上后不断开,一旦服务器端有新的数据就将其推送到客户端,讲到这里出现了几个问题。
1218 0
|
.NET
一起谈.NET技术,ASP.NET Routing对请求的处理方式
  原本这是《关于ASP.NET Routing的几点内容》一文中的一节,不过等写完这节之后发现这块内容已经比较完整了,而且它本身也是独立和最为常见的部分,因此我把它提取出来单独成文。至于那片文章的其他部分我会再修改一下,明天发布。
815 0
|
安全
一起谈.NET技术,详解ADO.NET连接池
ADO.NET中提供了连接池的功能,多数开发人员很少设置它,因为它是默认的。 界面设置如下图:   关闭连接池也很简单,在连接字符串如下: Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;P...
1115 0
|
.NET 开发框架 中间件
Asp.Net SignalR - 持久连接类
原文:Asp.Net SignalR - 持久连接类 持久连接类 通过SignalR持久连接类可以快速的构建一个即时通讯的应用,上篇博文已经我们创建一个owin Startup类和一个持久连接类来完成我们的工作,然后在Startup类的Configuration方法中添加了我们的中间件,配置名称 myconnection1 简单看一下持久连接类,里面有四个可供我们重写的方法,从字面上就可以看出是什么意思,需要一提的是持久连接类是享元模式的实践,因为一个客户端和服务器的连接过程中只会创建一个对象,后面都不会再创建对象。
1092 0
|
Web App开发 数据库连接 数据库