sqlserver定時執行(checkpoint),保證「髒頁」被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。
所有日誌都有嚴格順序,不能有跳躍。
如果恢復模式不是簡單模式,那麼sqlserver會認為使用者是要去備份日誌記錄的。所有沒備份的記錄都會保留。
如事務型複製(transactional replication)和映象。
除以上的型別之外,其他型別會在checkpoint時做截斷把占用的空間標誌為可重用。如果重用空間足夠,是不會報告日誌空間已滿。checkpoint的頻率由伺服器的「recovery interval」決定,預設為一分鐘左右。
在這種模式下,做完整備份和差異備份是不會截斷日誌的。
sqlserver不會干預前端程式的連線遺留事務在sqlserver中的行為。只要不退出,事務會一直存在,直到(此處原為知道,謝謝kalagooooo的細心發現,現以改正過來)
前端主動提交或者回滾。此時做日誌備份也沒用了。
如建立、重建索引。或者insert/delete大量資料。或者是伺服器端游標沒有把資料及時取走。
要避免上述現象,來防止日誌不斷增長。對於不會做日誌備份的資料庫,設為簡單模式即可。如果是完整模式,一定要定期做日誌備份。如果映象或複製除了問題,要及時處理,如果沒有處理,那麼要暫時拆除複製或映象。程式設計時,也要避免事務時間過長、過多。
檢查日誌使用百分比、恢復模式和日誌重用等待狀態。從2005以後,sys.databases加入了log_reuse_wait(log_reuse_wait_desc)來反映不能階段日誌的原因
log_reuse_wait
log_reuse_wait_desc 說明
0nothing
有可重用的虛擬日誌檔案 1
checkpoint
上次日誌截斷後,未出現檢查點,或者日誌頭部尚未跨乙個虛擬日誌檔案移動範圍(所有模式) 2
log_backup
要求日誌備份將日誌表頭前移(非簡單模式)。日誌備份完成後,日誌標頭將前移,並一些空間可能會變成可重用。 3
active_backup_or_restore
資料庫備份或還原正在進行(所有模式) 4
active_transaction
事務處於活動狀態(所有模式) 5
database_mirroring
資料庫映象滯後(完整模式) 6
replication
在事務複製中,與發布相關的事務仍未傳遞到分發資料庫(僅限於完整模式) 7
database_snapshot_createion
正在建立資料庫快照(所有模式) 8
log_scan
正在進行日誌掃瞄(所有模式) 9
other_transient
此值當前未使用
使用以下指令碼檢查:
dbcc sqlperf(logspace)
goselect name,recovery_model_desc,log_reuse_wait,log_reuse_wait_desc
from sys.databases
go
如果log space used(%)很高,就要馬上定位為什麼不能被清除。如果狀態為:log_backup,就意味(此處原為以為,感謝kalagooooo的細心發現,現以改正過來
)著sqlserver,意味著sqlserver等待著日誌備份。要檢查是否需要做日誌備份。
如果大部分日誌都在使用中且重用狀態為:active_transaction,那麼要看看最久的事務是誰申請的:
dbcc opentran
goselect *
from sys.dm_exec_sessions as t2 ,
sys.dm_exec_connections as t1
where t1.session_id = t2.session_id
and t1.session_id > 50
執行後返回:
找出最久的事務之後,先要檢查是否有問題,如果有問題,那麼最好從應用層面把事務提交或回滾。如果實在不行,那就使用kill spid來殺掉程序。
日誌檔案不斷增長
原文 日誌檔案不斷增長 sqlserver定時執行 checkpoint 保證 髒頁 被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。所有日誌都有嚴格順序,不能有跳躍。如果恢復模式不是簡單模式,那...
你還可以再詭異點嗎 SQL日誌檔案不斷增長
前言 今天算是遇到了乙個罕見的案例。sql日誌檔案不斷增長的各種例項不用多說,園子裡有很多牛人有過介紹,如果我再闡述這些陳谷子芝麻,想必已會被無數次吐槽。但這次我碰到的問題確實比較詭異,其解決方式也是我第一次使用。下文將為各位看管詳細介紹我的解決思路。現象 一客戶反饋資料庫的日誌檔案不斷增長,已分配...
tempdb 日誌檔案增長的問題
前兩天在乙個客戶那裡發現tempdb log 檔案增長很大,已經使用40gb了,而tempdb log 檔案總的分配空間是70gb,並且日誌空間貌似不能重用,他們使用sql 2012 打的sp4補丁,遠端分析問題,沒有發現長時間開啟的事物,業務使用事物都是使用完即時關閉的,而且通過查詢tempdb ...