Microsoft OLE DB Provider for SQL Server 错误 '80040e31' 超时已过期

时间:2021-09-25 00:36:14

一种可能是数据库文件在增加的时候超时了,而不是平常常以为的具体的SQL语句超时。把 FILEGROWTH 设置为一个更低的值,可能会恢复这个错误。

FILEGROWTH  的设置就是在数据库的 EntERPrise Manager 中,对数据库的属性的如下窗口进行设置:

一旦你的数据库文件大了后,上述超时就可能出现。这时候不要简单地以为服务器压力太大了。也许就是你的一个设置导致了超时。

默认SQL Server 在数据库文件满了后,是自动增加原数据库文件的10%大小,用来继续使用,解决方法就是把上述的文件增长这里设置为一个更低的百分比或者直接指定增加多少兆字节。 如果是默认的10%的话,可能导致的问题在于数据库大小一次性需要增长数G,www.aspxuexi.com,ASP学习网。

另外:不仅是数据文件满会导致此问题,日志文件满也一样。
某一条数据更新语句在数据库或日志文件即将满的时候执行,数据库增长的IO操作会导致延时,此延时会阻塞其他数据库操作,连锁反应,形成blocking。
其实此时找出一条正在阻塞的更新语句,在查询分析器中执行,此时是没有超市时间的。忍过几分钟,当这条语句执行完后,数据文件就会增长完成,所有的blocking也就解开了。

微软的 文章招录:(由机器人翻译)

替代方法
要变通解决此问题, 请使用下列方法之一:

• 手动展开数据库。 以手动, 展开数据库使用 ALTERDATABASE 语句或 SQLServer 企业管理器。
• 增大的应用程序, 以便有时间来展开数据库服务器请求 DML 客户查询超时值。 DML 提示数据库以展开。

例如, 如果使用 SQL 查询分析器, 默认查询超时值为 0 (无限)。 如果正在使用默认值, 您不会遇到此问题。 如果不使用默认值, 增大查询超时值。

可用于其他应用程序 (无论它们是否基于 WEB), 您在应用程序进行更改。 例如, 如果您使用 ADO, 可更改 CommandTimeout 属性 连接 或 Command 对象。
• 确定服务器上数据库扩展多长时间。 确定此, SQL 查询分析器中运行 ALTERDATABASE 语句, 然后查看状态栏。 在您确定此, 设置客户超时值为东西大于此值。
• 不要更改客户超时值。 继续执行测试自动扩展并查看多少扩展完成小于客户超值中。 自动增长 选项设置为此新 (小) 值。

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 对象的超时设置,再打开结果集。例如: