查询超时问题的处理

昨天一个WINFORM项目的程序出现查询超时的异常,报错如下:

处理过程如下:

1、根据以往经验,创建索引。但是在主要查询语句用到的几个列上创建组合索引后,问题并未解决;

2、在连库字符串中加入连接超时的配置信息:Connect Timeout=600,这里的单位是秒,如果设置成0,表示不限制,未能解决;

    有的资料上说需要在<connectstring>配置信息中加入ProviderName="System.Data.SqlClien"超时配置才管用,因为之前的连库串用的不是<connectstring>,所以也没有加;

3、后来经过测试,存储过程的执行在数据库里执行的时间只有11秒,但是在页面上执行了30秒左右就会弹出超时报错提示;因此,考虑应该是调用过程出的问题,按WEB服务超时的思路,搜到如下方法,在Web.config文件中加入:

<httpRuntime maxRequestLength="10240" appRequestQueueLimit="100" useFullyQualifiedRedirectUrl="true" executionTimeout="1200" />
问题未能解决;
4、后来又搜到了一种把存储过程提前重新编译的解决方法,一样是未能解决问题。
 
最后,参考以下文章:

C# 控制连接超时 - 无恨星晨 - 博客园
https://www.cnblogs.com/weixing/p/5512496.html

连接超时分为三种:


1、TCP Connection to SQL Server

2、SqlConnection.Open

3、 SqlCommand.Execute

第一种不太好控制,文章中相关的解决方法;

第二种是创建连接时的超时,连库字符串中的超时其实是这一种,因此那个Connect Timeout其实只是对连接超时起作用,按文章所说,3秒足够;

第三种是执行语句的超时,按文章所说是最简单的,只要设置SqlCommand的.CommandTimeout属性就可以。

因为我的程序架构有些乱,所以专门写了一个直接使用SqlCommand访问数据库的方法,并设置了CommandTimeout属性,再次执行程序,在一个较长的等待后,结果出来了,问题解决。

当然,还是不够完美,等待的时间有点长,可能是因为查义时没有任何限制条件的原因吧。

原文地址:https://www.cnblogs.com/lgzslf/p/15292044.html