引发SQL数据库超时的问题分析及解决办法

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

相关文章
相关标签/搜索