连接SQl Server时 出现超时时间已到,在 *** 作完成之前超时间已过或服务器未响应???

连接SQl Server时 出现超时时间已到,在 *** 作完成之前超时间已过或服务器未响应???,第1张

连接SQl Server时 出现超时时间已到,在 *** 作完成之前超时间已过或服务器未响应是设置错误造成的,解决方法为:

1、连接数据库的方法代码。

2、实现实例的全局配置的方法代码。

3、实现在 A 服务器实例执行连接服务器的查询15秒等待后报错代码如下。

4、实现在A服务器更改远程连接超时值为 5 秒在查询的代码如下。

5、确定后默认先尝试连接结果10秒报错代码如下。

6、使用该连接服务器的等待 10 秒则停止报错了效果如下。

原因分析:

查询超时一般来说首先要从sql语句和数据表的结构上找原因,优化sql语句和为数据库的查询字段建索引是最常用的办法。

另外,数据库的查询超时设置一般是sqlserver自己维护的(在你没有修改query wait配置前),只有当你的实际查询时间超过估计查询时间的25倍时,才会超时。

而造成超出估计值那么多的原因有两种可能:

一是估计时间不准确;

二是sql语句涉及到大量占用内存的查询(如排序和哈希 *** 作),内存不够,需要排队等待资源造成的。

解决办法:

A.优化语句,创建/使用合适的索引

B.解决第一个问题的方法,更新要查询表的索引分发统计,保证估计时间的正确性,UPDATE STATISTICS 表名

C.增加内存

如果想手动设置查询超时,可以使用以下语句:

sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'query wait', 2147483647 GO RECONFIGURE GO

解决方法:

1 修改几个关键页面或访问比较频繁的数据库访问 *** 作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。

2 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。

3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。

4 建议对数据库 *** 作进行大的修改,建立自己的数据库 *** 作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了。

解决方案二

解决方法(*):WEB.config 里面:在数据库连接加 Max Pool Size = 512server=localuid=pwd=database=2004Max Pool Size = 512">一劳永逸。

解决方案三

估计是连接(Connection)对象没有Close。倒是不必Dispose,而DataReader用完后应该关闭,但不关闭也没问题,只是不关闭的话此连接对象就一直不能用,只要你最终关闭了连接对象就不会出问题。

连接对象在Open后的 *** 作都放在try块中,后面跟一个finally块:conn.Close()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10045520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存