• 查询超时问题的处理


    昨天一个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属性,再次执行程序,在一个较长的等待后,结果出来了,问题解决。

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

  • 相关阅读:
    JS Number(),parseInt(),parseFloat()
    html5+css3+js实现贪吃蛇游戏功能
    通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解
    .NET core实现一个简易的事件协调器(saga)
    阿里云搭建k8s高可用集群(1.17.3)
    k8s单master集群通过备份etcd还原集群
    个人笔记快速搭建k8s1.16.0
    .netcore下的微服务、容器、运维、自动化发布
    KubeSphere2.1踩坑记
    通过Dapr实现一个简单的基于.net的微服务电商系统
  • 原文地址:https://www.cnblogs.com/lgzslf/p/15292044.html
Copyright © 2020-2023  润新知