Sqlserver 经常数据库锁表的原因,日志文件超出范围。

今天发现一个问题,录入文章的时候,系统卡死,过了很久才恢复相应。但是浏览查看文章的时候是数据库是正常的。

查看是否锁表,执行命令:

select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName

from sys.dm_tran_locks where resource_type='OBJECT'

找到锁定的表

kill 进程号 杀死进程

再次实验,还是卡住。不得已重启数据库,需要5~10分钟才能重启。问题依然存在。

问题没有解决 于是想看看日志,进入sqlserver management studio ,点管理进入sql server 日志,查看到

SQL Server Autogrow of file ‘xxx_Log’ in database ‘xxx’ was cancelled by user or timed out

分析原因可能是: Sqlserver 日志文件超级大,满了造成数据库锁表数据写入失败。

我们安装数据库后,系统会默认把数据库文件和数据库日志文件最大设为500MB,当然你中途可以更改这个限制。当日志文件接近最大值时,继续使用数据库会提示:事务日志已满。

此时 xxx_log 文件已经达到300g大小。

网上查找相关的锁表原因,经过处理,不重启sqlserver,解决了此问题。

总结 解决方法如下:

解决这个问题,有2种方案:

首先需要做的工作如下:

 1.备份数据库日志文件

   如无需要,可清理数据库日志文件

 2.设置数据库日志文件的增长速率为xxxMB,而非xxx%

 3.设定清理数据库日志任务计划

解决方案一 脚本执行:

USE master

GO

ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT

GO

ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE

GO

USE 数据库名称

GO

DBCC SHRINKFILE (N'数据库日志文件名称' , 11, TRUNCATEONLY)

GO

USE master

GO

ALTER DATABASE 数据库名称 SET RECOVERY FULL WITH NO_WAIT

GO

ALTER DATABASE 数据库名称 SET RECOVERY FULL

第2种解决方案:在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小

一、删除日志文件。

二、手动收缩。操作如下:

1、在数据库页面中选择“选项”;

2、在打开的选项页面中,将恢复模式更改为“简单”;

3、然后点击下方的“确定”;

4、然后在数据库文件和文件组汇总,将文件类型更改为“日志”;

5、在下方的收缩操作中,选择“将文件收缩到1MB”即可,也可以根据需求自行设置文件收缩大小。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值