连接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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)