警惕数据库自增长导致系统宕机

数据库 SQL Server 数据库运维
作者前几天数据库服务器,突然宕机了,造成其提供数据的两个web也中断服务。究其原因,是数据库的自增长造成的。

故障现象:

1、电脑运行缓慢,几乎不能操纵

2、此数据源支持的web程序已down,暴露出来的Error:获得连接超时。

3、本地连接数据库没有问题,但是本地的Web程序居然获得不了数据连接

4、CPU利用率、内存占用并不高

系统出现当机的可能性很多,造成了确定原因很困难。只能地毯式搜索。

1、系统已经进行了全面的查毒、查木马操作,没有发现可疑文件,系统补丁也及时进行修复,被人挂马的可能性不大。

根据系统的LOG进行排查:

2、远程登录加载的程序错误。尽管爆出多次错误,但不致于数据库连接中断。同样出现类似问题的其它机器并未出现宕机。

3、日志自动增长超时,这个可能性很大。在两次系统当机前,这个Error曝出的最多,而且系统正常之后,此类ErrorLog消失。

错误信息:

原因分析:

默认SQL Server 在数据库文件满了后,是自动增加原数据库文件的10%大小,用来继续使用。还有日志文件,同样如此。假如你的数据库文件很大了,文件再增加10%,将会是一种较大的负担。

经查询,其中一数据库的日志文件已经有2.37GB之多,如果增加10%,就要增加超过200MB,需要较长的时间时间来完成,这种操作很可能超时。然后其它的插入、更新、查询操作产生连锁反应。而且,还有定时器,在不断进行数据访问,如果出现超时,则很有可能出现死锁,致使w3wp.exe进程中线程数明显增加。

如果数据库在事务中进行更新操作时,而恰巧此时,日志空间不足,需要增加10%的日志空间,而数据库事务执行超时时间默认为30秒,这时如果操作超时,事务将进行回滚,此时,其它的数据库操作会产生连锁反应,形成阻塞。

小型实验:为了证明这个问题,简单做了一个小例子,设置:日志满后自动增加1G的空间。结果,也出现了此类错误,而且在此期间,不能对数据库进行任何操作。

MSDN相关介绍:

如果您运行的事务需要的日志空间大于可用空间,并且您已经为该数据库的事务日志打开自动增长选项,则在完成事务所花费的时间中,有一部分是事务日志按配置量增长所花费的时间。如果该增长量很大,或者有其他因素导致时间延长,则您在其中打开事务的查询可能因超时错误而失败。数据库的数据部分的自动增长可能会造成此类问题。  http://support.microsoft.com/kb/315512/zh-cn

解决方法:将文件增长设置为一个更低的百分比或者直接指定增加多少兆字节。

事件类型:        信息

事件来源:        MSSQLSERVER

事件种类:        (2)

事件 ID: 5144

日期:                 2009-3-3

事件:                 11:57:18

用户:                 N/A

描述:

数据库 'databaseName' 中的文件 'databaseName_log' 的自动增长已由用户取消,或已在 30687 毫秒后超时。请使用 ALTER DATABASE 为此文件设置较小的 FILEGROWTH 值,或显式设置新的文件大小。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

认真查阅了一些资料,在网络中也得到几位同病者的提供的分析结果,基本已经确定了问题的所在。

【编辑推荐】

  1. 优化SQL Server数据库的经验总结
  2. MySQL***高并发网站实战攻略
  3. SQL Server查询速度缓慢解决办法
责任编辑:彭凡 来源: 博客园
相关推荐

2011-04-18 10:00:32

SQL Server数据库迁移

2011-03-31 14:33:57

SQL Server最小宕机迁移

2011-08-25 13:59:45

Access自增长字段SQL Server

2022-06-06 15:41:09

数据库Redis性能

2019-10-07 22:50:50

数据库工具技术

2011-03-22 10:36:39

Oracle数据库自动增长列

2020-05-29 09:40:36

数据库PostgreSQL Oracle

2020-05-21 10:06:23

支付宝OceanBaseTPC-C

2020-05-21 10:26:35

数据库

2010-09-25 15:42:26

数据库集群Facebook

2011-05-24 14:48:46

压缩数据库

2019-12-09 10:03:40

MySQLSQL数据库

2023-11-28 15:02:40

矢量数据库人工智能

2011-07-19 17:06:33

Oracle数据库自动增长列

2010-09-07 11:01:13

DB2数据库

2018-05-17 10:50:34

Cache数据库存储

2021-02-28 07:47:41

数据库密码加密

2011-01-18 09:47:33

自增ID

2021-09-22 15:16:51

图数据库金融

2021-11-26 22:07:57

数据库管理Mongodb
点赞
收藏

51CTO技术栈公众号