关于sql server 超时的问题

老问题
是关于sql server 中超时问题,一个表中有一百多万条记录,现在当我select ,delete(在sql server 中) 时总出现timeout 错误,我看了以前的贴子,好像类似问题都没提到好的解决办法,也没看到微软专家给个意见,难道真的是sql server的bug吗?
---------------------------------------------------------------

关键还是优化,使得你的查询和删除语句速度比较快,才不会出现timeout 错误。

---------------------------------------------------------------

合适的索引和保证能用到索引的语句!!
---------------------------------------------------------------

按常用的查询列的顺序建立合适数量的索引

---------------------------------------------------------------

索引与优化查询语句,不是三言两语说得清楚的,建议参考《SQL完全参考手册》
---------------------------------------------------------------

1,优化数据库设计,包括表结构和约束(主键,索引等)
2,优化查询设计
3,检查内存
4,可用sp_config修改time out,time wait等参数
---------------------------------------------------------------

查询超时一般来说首先要从sql语句和数据表的结构上找原因,优化sql语句和为数据库的查询字段建索引是最常用的办法。
另外,数据库的查询超时设置一般是sqlserver自己维护的(在你没有修改query wait配置前),只有当你的实际查询时间超过估计查询时间的25倍时,才会超时。而造成超出估计值那么多的原因有两种可能,一是估计时间不准确;二是sql语句涉及到大量占用内存的查询(如排序和哈希操作),内存不够,需要排队等待资源造成的。
第一种问题的解决办法是:更新要查询表的索引分发统计,保证估计时间的正确性,UPDATE STATISTICS yourtable
第二个问题的解决办法是:增加内存

如果想手动设置查询超时,可以使用以下语句:
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'query wait', 2147483647
GO
RECONFIGURE
GO

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus