ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sqlserver事务日志增长过快

2020-06-10 12:56:52  阅读:234  来源: 互联网

标签:事务 备份 sqlserver t1 提交 日志 过快 运行


问题背景:
客户反馈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


如果大部分日志都在使用中且重用状态为: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
复制代码

 

 

 

 

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

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

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

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

标签:事务,备份,sqlserver,t1,提交,日志,过快,运行
来源: https://www.cnblogs.com/shujuyr/p/13084354.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有