sqlserver事务日志增长过快

摘要:
背景:客户报告说,SQL Server数据库日志快速增长,在两分钟内增加了几g。目前,数据库已更改为简单模式。SQL Server日志文件持续增长的原因是:1.数据库处于完整模式,但没有常规日志备份。

问题背景:
客户反馈sqlserver数据库日志增长迅速,两分钟增长好几个g,目前数据库已改为简单模式

sqlserver 日志文件不停增长的原因
日志不停增长的原因

1.数据库是完整模式,但是并没有定期的进行日志备份。日志备份可以截断事务,可以使得空间重用。
解决这个问题,只需做好日志定时备份的计划作业就行

2.有事务长时间没有提交
由于开发人员的粗心大意,没有把已经运行完成的事务提交,日志一直在记录,导致很大
解决这个问题,查找出已经运行完成但没有提交的事务,kill掉此事务即可

3.有很大的事务正在运行
这个事务很大,一直不停的在记录大量的日志,导致日志增大
解决这个问题,看看在语句和业务逻辑上看看能否优化的余地,运行很大的事务能否分事务运行

造成2,3两种情况的根本原因是因为:日志备份只备份已提交的事务
还需要注意的是:只有日志备份才能截断日志,使得日志空间可以重用!!!

问题排查:

1 DBCC SQLPERF(LOGSPACE)
2 GO
3 SELECT name,recovery_model_desc,log_reuse_wait,log_reuse_wait_desc
4 FROM sys.databases
5 GO

sqlserver事务日志增长过快第1张


如果大部分日志都在使用中且重用状态为:ACTIVE_TRANSACTION,那么要看看最久的事务是谁申请的


步骤2:检查最久的活动事务:
如果大部分日志都在使用中且重用状态为:ACTIVE_TRANSACTION,那么要看看最久的事务是谁申请的:

复制代码
1 DBCC OPENTRAN
2 GO
3 SELECT *
4 FROM sys.dm_exec_sessions AS t2 ,
5 sys.dm_exec_connections AS t1
6 CROSS APPLY sys.dm_exec_sql_text(t1.most_recent_sql_handle) AS st
7 WHERE t1.session_id = t2.session_id
8 AND t1.session_id > 50
复制代码

 sqlserver事务日志增长过快第4张

查看spid为314的进程,text为一条删除语句,delete from modeDataShare_141
如果Log Space Used(%)很高,就要马上定位为什么不能被清除。如果状态为:LOG_BACKUP,意味着SQLServer等待着日志备份。要检查是否需要做日志备份。

此现象符合
2.有事务长时间没有提交
由于开发人员的粗心大意,没有把已经运行完成的事务提交,日志一直在记录,导致很大
解决这个问题,查找出已经运行完成但没有提交的事务,kill掉此事务即可

3.有很大的事务正在运行
这个事务很大,一直不停的在记录大量的日志,导致日志增大
解决这个问题,看看在语句和业务逻辑上看看能否优化的余地,运行很大的事务能否分事务运行

需要程序层面及时提交事务

免责声明:文章转载自《sqlserver事务日志增长过快》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MacOS 下完全卸载 Tuxera NTFS使用NSSM安装Windows服务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何同步两个SQLServer数据库的内容 dodo

如何同步两个SQLServer数据库的内容? 程序代码可以有版本管理CVS进行同步管理,可是数据库同步就非常麻烦,只能自己改了一个后再去改另一个,如果忘记了更改另一个经常造成两个数据库的结构或内容上不一致. 分发与复制 用强制   订阅实现数据库同步操作  大量和批量的数据可以用数据库的同步机制处理: // 说明: 为方便操作,所有操作均在发布服...

Django的锁和事务

Django的锁和事务 锁 select_for_update(nowait=False, skip_locked=False) 返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。 举个例子: entries = Entry.objects.select_for_update().filte...

QeePHP的事务安全支持

Qee对事务提供了简单的支持,当然只有在存储引擎支持事务的前提下! 比如我们的的用户表分为用户基本表member表和用户详细信息表memberfield表,他们为一对一hasone,memberfield存有member表的主键uid,假设关联的属性为field 当我们更新用户信息时,可能同时要更新member表,和memberfield表,比如:...

Oracle表中一行记录被锁(行锁,表锁,死锁)

表现形式:可以向表里面save新数据,但是无法跟新某一条数据,update的时候就一直在等待。 Oracle锁表查询和解锁方法 数据库操作语句的分类DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert、delete、updateDCL:数据库控制语言 ,关键字:grant、removeDQL:数据库查询语言,关键字:s...

用sqlserver的sqlcmd、osql、isql的备份与还原

用sqlserver的sqlcmd、osql、isql的备份与还原 --sqlcmd ,sql2005新加工具1、备份"C:\Program Files\MicrosoftSQLServer\90\Tools\Binn\SQLCMD.EXE" -S .\sqlexpress -U sa -P 000000 -d master -Q"BACKUP DATAB...

事务persistenceJPA基本API描述

改章节笔者在北京喝咖啡的时候突然想到的...近期就有想写几篇关于事务persistence的博客,所以回家到以后就奋笔疾书的写出来发布了 JPA(Java Persistence API,Java持久化API),定义了对象-关系映射(ORM)以及实体对象持久化的标准接口。 JPA是JSR-220(EJB3.0)标准的一部分,在JSR-220中划定实体对象(...