資源描述:
《sqlserver事務(wù)日志》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、SQLServer事務(wù)日志SSYBASESQLServer的每一個數(shù)據(jù)庫,無論是系統(tǒng)數(shù)據(jù)庫(master,model,sybsystemprocs,tempdb),還是用戶數(shù)據(jù)庫,都有自己的transactionlog,每個庫都有syslogs表。Log記錄用戶對數(shù)據(jù)庫修改的操作,所以如果不用命令清除,log會一直增長直至占滿空間。清除log可用dumptransaction命令;或者開放數(shù)據(jù)庫選項trunclogonchkpt,數(shù)據(jù)庫會每隔一段間隔自動清除log。管理好數(shù)據(jù)庫log是用戶操作數(shù)據(jù)庫必須考慮的一面。 下面就幾個方面談?wù)刲o
2、g及其管理: 一、SQLServer如何記錄及讀取日志信息 我們知道,SQLServer是先記log的機制。ServerCacheMemory中日志頁總是先寫于數(shù)據(jù)頁: Logpages在commit,checkpoint,spaceneeded時寫入硬盤?! atapages在checkpoint,spaceneeded時寫入硬盤?! ∠到y(tǒng)在recovery時讀每個database的syslogs表的信息,回退未完成的事務(wù)(transaction)(數(shù)據(jù)改變到事務(wù)前狀態(tài));完成已提交的事務(wù)(transaction)(數(shù)據(jù)改變?yōu)槭聞?wù)提
3、交后的狀態(tài))。在Log中記下checkpoint點。這樣保證整個數(shù)據(jù)庫系統(tǒng)的一致性和完整性?! 《?、Transactionlogs和checkpoint進程 checkpoint命令的功能是強制所有“臟”頁(自上次寫入數(shù)據(jù)庫設(shè)備后被更新過的頁)寫入數(shù)據(jù)庫設(shè)備。自動的checkpoint間隔是由SQLServer根據(jù)系統(tǒng)活動和系統(tǒng)表sysconfigures中的恢復間隔(recoveryinterval)值計算出的。通過指定系統(tǒng)恢復所需的時間總量,恢復間隔決定了checkpoint的頻率。 如果數(shù)據(jù)庫開放trunclogonchkpt選項
4、,則SQL-5-Server在數(shù)據(jù)庫系統(tǒng)執(zhí)行checkpoint時自動清除log。但用戶自己寫入執(zhí)行的checkpoint命令并不清除log,即使trunclogonchkpt選項開放。只有在trunclogonchkpt選項開放時,SQLServer自動執(zhí)行checkpoint動作,才能自動清除log。這個自動的checkpoint動作在SQLServer中的進程叫做checkpoint進程。當trunclogonchkpt選項開放時,checkpoint進程每隔0秒左右清除log,而不考慮recoveryinterval設(shè)置時間的間隔。
5、 三、Transactionlog的大小 沒有一個十分嚴格的和確切的方法來確定一個數(shù)據(jù)庫的log應(yīng)該給多大空間。對一個新建的數(shù)據(jù)庫來說,log大小為整個數(shù)據(jù)庫大小的20%左右。因為log記錄對數(shù)據(jù)庫的修改,如果修改的動作頻繁,則log的增長十分迅速。所以說log空間大小依賴于用戶是如何使用數(shù)據(jù)庫的。 例如:1.update,insert和delete的頻率2.每個transaction中數(shù)據(jù)的修改量3.SQLServer系統(tǒng)參數(shù)recoveryinterval值4.log是否存到介質(zhì)上用于數(shù)據(jù)庫恢復 還有其它因素影響log大小,我們
6、應(yīng)該根據(jù)操作估計log大小,并間隔一個周期就對log進行備份和清除?! ∷?、檢測log的大小 若log在自己的設(shè)備上,dbccchecktable(syslogs)有如下信息:例:***NOTICE:spaceusedonthelogsegmentis12.87Mbytes,64.35%???***NOTICE:spacefreeonthelogsegmentis7.13Mbytes,35.65%? 根據(jù)log剩余空間比例來決定是否使用dumptransaction命令來備份和清除log?! ∮每焖俜椒▉砼袛鄑ransactionlog
7、滿的程度。1>usedatabase_name?2>go?1>selectdata_pgs(8,doampg)?2>fromsysindexeswhereid=8?3>go?Note:thisquerymaybeoffbyasmanyas16pages. 在syslogs表用sp_spaceused命令?! ∥濉og設(shè)備-5- 一般來說,應(yīng)該將一個數(shù)據(jù)庫的data和log存放在不同的數(shù)據(jù)庫設(shè)備上。這樣做的好處:1.可以單獨地備份(backup)transactionlog?2.防止數(shù)據(jù)庫溢滿3.可以看到log空間的使用情況。[dbcc
8、checktable(syslogs)]?4.可以鏡像log設(shè)備 六、log的清除 數(shù)據(jù)庫的log是不斷增長的,必須在它占滿空間之前清除。前面已經(jīng)討論過,清除log可以開放數(shù)