各位大大你們好,公司有一台很舊的server,使用sql2000,使用者回報後端程式不定時回應時間拉長,我這邊查檢的結果是LDF增長設定為10 percent,增長期間程式程式便會等待回應。
但我檢查備份模式設置為簡易,LDF理應可以自動truncate使之能重複運用,為何還會不斷的增長呢?
以下附上我目前所有的查檢過程。
1.確認復原模式為簡易模式。
2.已經使用DBCC OPTRAN來確認沒有交易孤兒。
3.手動下達checkpoint,LOG truncate沒問題,空間會釋放出來。
4.該資料庫無設置複寫(保險起見也下語法移除複寫設置)。
5.使用 dbcc traceon(3502)檢查LDF檔於使用達70%時未觸發checkpoint來truncate LDF。其餘相同伺服器的DB於70%會自動觸發checkpoint釋放LDF空間。
6.使用 DBCC CheckDB來檢查資料庫是否異常也沒有。
7.該資料庫使用幾乎沒有insert語法僅有update與一些交易序列(這個情報不知道有沒有用處)
8.完整備份過數次,備份完雖然會觸發checkpoint,truncate ldf,但之後狀況相同LDF持續增長。
9.備份該資料庫移往其餘伺服器(sql2000)進行測試,持續增長情況消失,會自動truncate了。
我的初步結論為會不會是:
1.資料庫設定有被更動,讓checkpoint不會於ldf達70%觸發。
2.資料庫特定語法造成自動truncate不發生。(移往其餘伺服器測試的推論)
3.上次備份方式異常,造成LDF必須被保留。(沒根據胡亂猜測)
註解:
1.sql2000沒有 sys.databases 系統View表,我沒辦法去看為啥LDF不能truncate
2.目前暫時設置一個禮拜備份一次,讓checkpoint觸發,問題雖然解決但就是覺得不甘心
有任何大大有遇過相關的問題嗎?
SQL 2000 Log 可以被自動 Truncate 的條件有:
當 Recovery mode 設定成 Simple mode 時:
當 Recovery mode 設定成 Full 或 bulk logged mode 時:
我猜你正常的 Server 使用 Simple mode, 不正常的則不是....
曾經遇到的實際案例是,因為系統交接時,並無交接文件,資料庫管理員也認為資料庫並沒有其他 insert 操作,但是詳細排查後,才發現作業系統有一支背景程式,不時會將資料庫相關的應用系統日誌紀錄(Log) insert into Table ,因而產生交易紀錄。直到關閉了該背景程式,才落幕。