Sybase SQL Server 的每一個資料庫,無論是系統資料庫master,model, sybsystemprocs, tempdb),還是使用者資料庫,都有自己的transaction log,每個庫都有 syslogs表。Log記錄使用者對資料庫修改的操作,所以如果不用命令清除, log會一直增長直至 佔滿空間。清除log可用dump transaction 命令;或者開放資料庫選項trunc log on chkpt, 資料庫會每隔一段間隔自動清除log。管理好資料庫log是使用者操作資料庫必須考慮的一面。
下面就幾個方面談談log及其管理:
一、SQL Server 如何記錄及讀取日誌資訊
我們知道,SQL Server是先記log的機制。Server Cache Memory中日誌頁總是先寫於資料頁:
Log pages 在commit ,checkpoint,space needed 時寫入硬碟。
Data pages 在checkpoint,space needed 時寫入硬碟。
系統在recovery 時讀每個database 的syslogs 表的資訊,回退未完成的事務 (transaction)資料改變到事務前狀態);完成已提交的事務(transaction)資料改變為事 務提交後的狀態)。在Log中記下checkpoint點。這樣保證整個資料庫系統的一致性和完整性。
二、Transaction logs 和checkpoint 進程
checkpoint 命令的功能是強制所有“髒”頁自上次寫入資料庫裝置後被更新過的頁)寫 入資料庫裝置。自動的checkpoint 間隔是由SQL Server 根據系統活動和系統資料表 sysconfigures中的復原間隔recovery interval)值計算出的。通過指定系統復原所需的時 間總量,復原間隔決定了checkpoint 的頻率。
如果資料庫開放trunc log on chkpt選項,則SQL Server在資料庫系統執行checkpoint時 自動清除log。但使用者自己寫入執行的checkpoint命令並不清除log,即使trunc log on chkpt 選項開放。只有在trunc log on chkpt選項開放時,SQL Server自動執行checkpoint動作,才 能自動清除log 。這個自動的checkpoint動作在SQL Server中的進程叫做checkpoint進程。當 trunc log on chkpt選項開放時,checkpoint進程每隔0秒左右清除log,而不考慮recovery interval設定時間的間隔。
三、Transaction log 的大小
沒有一個十分嚴格的和確切的方法來確定一個資料庫的log應該給多大空間。對一個建立的 資料庫來說,log大小為整個資料庫大小的20%左右。因為log記錄對資料庫的修改,如果修改 的動作頻繁,則log的增長十分迅速。所以說log空間大小依賴於使用者是如何使用資料庫的。
例如:
◆update,insert和delete 的頻率
◆每個transaction 中資料的修改量
◆SQL Server系統參數recovery interval 值
◆log是否存到介質上用於資料庫恢複
還有其它因素影響log大小,我們應該根據操作估計log大小,並間隔一個周期就對log進行 備份和清除。