Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 引起SQL数据库超时的问题分析及解决办法
【标  题】:引起SQL数据库超时的问题分析及解决办法
【关键字】:SQL
【来  源】:http://blog.csdn.net/sxycgxj/archive/2007/02/07/1504165.aspx

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

Your Ad Here

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数据库连接超时.

四大数据库的比较(SQL Server、Oracle、Sybase和DB2):【上一篇】
条件放在表中的SQL查询的解决方案:【下一篇】
【相关文章】
  • 四大数据库的比较(SQL Server、Oracle、Sybase和DB2)
  • Sql Server2000里面获得数据库里面所有的用户表名称和对应表的列名称
  • SQL查询语句大全
  • SQL Server 2005 查询计划指南
  • SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
  • SQL学习之查询技巧 排他查询 只是用过某商品的顾客
  • 三步堵死SQL注入漏洞
  • SQL学习之查询技巧 求某日期所在月份的天数
  • Vim(vi) 与 SQL*Plus 集成以及AnySQL尝鲜
  • SQL学习之查询技巧 查询表是否存在的两种方法
  • 【随机文章】
  • Windows XP 中组建对等型网络
  • 利用ACDSee 6.0创建文件“备忘
  • C语言编的MD5主程序
  • Xajax中文手册
  • ORACLE分析表和索引的脚本
  • 三国志10酒家任务总览
  • FolderSelectDialog(Java)
  • 一个把WORD转换成HTML的程序
  • 系统管理的小工具( 持续更新中... )
  • 微软:Vista无需第三方杀毒软件是误解
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.