首页 > 数据库 >引起SQL数据库超时的问题分析及解决办法

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

时间:2023-04-19 10:37:15浏览次数:35  
标签:解决办法 查询 数据库 Server 设置 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数据库连接超时.

标签:解决办法,查询,数据库,Server,设置,SQL,超时
From: https://blog.51cto.com/u_3649463/6205773

相关文章

  • MySQL 时间类型 date、datetime 和 timestamp 的用法与区别
    时间范围datetime和timestamp区别时间范围不一样,TIMESTAMP要小很多,且最大范围为2038-01-1903:14:07.999999,到期也不远了。datetime与时区无关、timestamp与时区有关。对于timestamp,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转......
  • mysql增删改查
    1、增insertintotable_name()value();insertintotable_name()values(),(),();insertintotable_namevalue();增加数据,通过关键字insert进行如果是在一行中插入部分字段数据,必须在value之前声明插入字段,而value后的值按声明字段顺序排列。如果插入全部字段,可......
  • mysql高级查询
    1、union联合查询,使用关键字union,其前后为查询字段数相等的select语句。查询结果是先输出前表的行,再输出后表的行。union后可以使用关键字all或者distinct,分别表示不去重和去重。去重指的是将重复的行只保留最开始的一行,判断依据是前后按序对应的查询字段,只区分字面量,而不关心数......
  • mysql事务
    1、介绍MySQL事务主要用于处理操作量大,复杂度高的数据。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。事务用来管理insert,update,delete语句2、事务条件ACID......
  • mysql之alter命令
    #删除表字段,需要表中字段数大于1ALTERTABLEtestalter_tblDROPi;#添加字段,添加到末尾ALTERTABLEtestalter_tblADDiINT;#添加字段到首位ALTERTABLEtestalter_tblADDiINTFIRST;#添加字段到某字段之后ALTERTABLEtestalter_tblADDiINTAFTERc;#定义......
  • mysql管理
    MySQL管理|菜鸟教程(runoob.com),在下方笔记有大量有用内容。1、启动管理1.1windows1.2linux(这里安装的是mariadb)systemctlstartmariadb#启动systemctlrestartmariadb#重启systemctlstopmariadb#停止systemctlstatusmariadb#查看运行状态systemctlenabl......
  • mysql索引与主键、外键
    1、介绍优点:索引可以大大提高mysql的检索速度。缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。2、分类2.1普通索引#基础创建CREA......
  • mysql函数
    1、介绍mysql函数分为四大类:字符串函数、数值函数、日期函数和高级函数。MySQL函数|菜鸟教程(runoob.com)2、常用一般函数时间:now()#返回当前日期和时间2018-09-1920:57:43curtime()#返回当前时间19:59:02current_timestamp()#返回当前日期和时间2018-09-1920:......
  • mysql函数(补充)
    环境:10.4.26-MariaDB1、sleepsleep(n)执行一遍函数,延时n秒如果在where条件中多次需要执行sleep,则多次延时sleep函数返回为false,不论是n是否为0假设设置sleep(100),数据库如实进行了延时n可以设定为小数,最小是0.001,但是这并不是绝对准确2、updatexmlupdatexml(v1,v2,v3......
  • MySQL 主从延迟的常见原因及解决方法
    承蒙大家的支持,刚上市的《MySQL实战》已经跃居京东自营数据库图书热卖榜第1名,收到的反馈也普遍不错。对该书感兴趣的童鞋可通过右边的链接购买。目前,京东自营有活动,只需5折。主从延迟作为MySQL的痛点已经存在很多年了,以至于大家都有一种错觉:有MySQL复制的地方就有主从延......