通过C#查询SQLServer数据库超时-创新互联
生产环境的系统,在查询数据的时候,日志记录数据“Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。”,“等待的操作过时”等,初步判断是因为查询超时导致的,根据源码分析,获取到查询操作的SQL脚本,然后跟踪到查询业务的SQL参数信息,在数据库中查询,发现数据的返回时间小于1s,基本上是实时返回,排除了锁表等操作。
后更改数据查询的超时时间,改成3分钟,系统还是报查询超时。但是程序在测试环境,反复的测试,也没有问题;而且程序昨天是正常的,数据量也没有出现暴增的情况,整体的数据量也不大。
后通过网络查询,发现有重启服务器解决该问题的方法,但是由于是生成环境,没法进行重启服务器,客户在等,很是着急。后在通过万能的网络,查询到,可能是参数化传参导致的,传递参数的SqlDbType和数据库里的类型不一致会导致出现数据库上直接查询,返回数据很快,但是通过程序去查询,会出现查询超时的情况。然后去检查程序和数据库,发现确实不一致,程序中使用的是SqlDbType.VarChar,但是在数据库存储中使用的数据类型是NVarChar。
然后修改程序的SQL语句不是参数化传参,改为拼接的方式,然后发布程序,登录检测,发现程序正常返回数据,这样看来,问题就出现在C#程序中的参数化的参数类型和数据库中的类型不一致导致的。
这个Bug,是个隐藏的Bug,问题不会一直出现,因为程序中这样操作的,不仅仅是这个查询的一处地方。这次的问题比较特殊,做个记录,以备下次查询。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
本文题目:通过C#查询SQLServer数据库超时-创新互联
分享路径:http://hbruida.cn/article/dsgpci.html