sqlserver事務日志增長過快


問題背景:
客戶反饋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.有很大的事務正在運行
這個事務很大,一直不停的在記錄大量的日志,導致日志增大
解決這個問題,看看在語句和業務邏輯上看看能否優化的余地,運行很大的事務能否分事務運行

需要程序層面及時提交事務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM