当前位置: 首页 > 图文教程 > 数据库 > MSSQL > Sql Server 数据库超时问题的解决方法

MSSQL
如何用SQL语句来判断已知表是否存在
剖析SQL Server 2005中的报告服务架构
使用Microsoft SQL Server 2000的XML查询
让SQL Server为工作负载高峰提前准备
用Sql server一次插入多条数据
SQL SERVER2000深入学习之常见错误
关于SQL Server数据库的若干注意事项
sql server 2005中的表分区
SQL Server实用经验与技巧大汇集
限制SQL Server只能让指定的机器连接
SQL Server数据汇总完全解析
SQL查询语句使用精华
优化SQL Server服务器内存配置的策略
Sql server进行优化50招特效
用SQL语句实现异构数据库之间的导数据导入/出
SQL Server Compact Edition RC1 发布!
SQL Server死锁的分析
加快SQL Server备份和重新存储的速度
使用TSQL操作面试SQL Server开发人员
SQL 外链接操作小结 inner join left join right join

MSSQL 中的 Sql Server 数据库超时问题的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 74 ::
收藏到网摘: n/a

1.由于数据库设计问题造成SQL数据库新增数据时超时

症状:

Microsoft OLE DB Provider for SQL Server 错误 '80040e31' ([ODBC SQL Server Driver]超时已过期);

服务器上看CPU、内存占用率很低;

事件日志中提示: 数据库 '*********' 中文件 '***********' 的自动增长在 453 毫秒后已取消或出现超时。使用 ALTER DATABASE 设置更小的 FILEGROWTH 或设置新的大小。

原因:

数据库设置时,[文件增长]按百分比来增长,当数据库文件很大时(1G以上),新增操作都会报超时,而这时候其实CPU、内存占用率都非常非常的低。

解决方法:

把上述的文件增长这里设置为一个更低的百分比或者直接指定增加多少兆字节。

2.SQL Server数据库超时设置

修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒。

企业管理器中的设置:

A、在企业管理器中,选择菜单上的"工具",再选择"选项";

B、在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡;

C、在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 30。

查询分析器中的设置:

单击“工具”->"选项"->"连接"; 将登录超时设置为一个较大的数字,连接超时改为0。

3.查询语句时超时

原因分析:

查询超时一般来说首先要从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
 
4.应用程序连接失败

故障:

在应用程序中我们也会遇到类似的错误信息,例如:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'. [Microsoft][ODBC SQL Server Driver]超时已过期.

解决方法:

A.如果遇到连接超时的错误,我们可以在程序中修改 Connection 对象的超时设置,再打开该连接。例如:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={SQL Server};SERVER=ServerName;UID=USER;
PWD=password;DATABASE=mydatabase"
Conn. Properties("Connect Timeout") = 15 '以秒为单位
Conn.open DSNtest
%>

B.  如果遇到查询超时的错误,我们可以在程序中修改 Recordset 对象的超时设置,再打开结果集。例如:

Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
. . .
cmd1 = txtQuery.Text
Set rs = New ADODB.Recordset
rs.Properties("Command Time Out") = 300
'同样以秒为单位,如果设置为 0 表示无限制
rs.Open cmd1, cn
rs.MoveFirst
. . .
 
另外,一些硬件及网络方面的原因也可能造成SQL数据库连接超时.