文章編號: 110139 - 上次校閱: 2006年11月22日 - 版次: 4.0 INF:SQL 交易記錄檔滿溢的原因
本文曾發行於 CHT110139 在此頁中結論 SQL Server 交易記錄檔會滿溢,進而導致資料庫後續的 UPDATE、DELETE 或 INSERT 活動無法執行,其中亦包括 CHECKPOINT 在內。此問題通常會以錯誤 1105 表示: Can't allocate space for object syslogs in database dbname because the logsegment is full.If you ran out of space in syslogs, dump the transaction log.Otherwise use ALTER DATABASE or sp_extendsegment to increase the size of the segment. (無法在資料庫 dbname 中配置物件 syslog 的空間,因為記錄片段已滿。如果 syslog 的空間已經用盡,請傾印交易記錄檔。否則,請使用 ALTER DATABASE 或 sp_extendsegment 增加片段大小。)
其他相關資訊 交易完整性是標準關聯式資料庫 (如 Microsoft SQL Server) 的基本特性。任何交易絕不可以只完成部分 (亦即在功能上不可分割),且其所有變更均須全數套用或全數不套用,即使發生系統失敗亦是如此。在使用者定義的交易中,所有以 BEGIN TRANSACTION 與 COMMIT TRANSACTION 陳述式括起的陳述式,皆會全數套用或全數不套用。在隱含交易中,會將所有單一 SQL 陳述式視為不可部分完成的單位。 這項功能會可以讓 SQL Server 如果在運作期間及重新啟動後發生電源中斷、作業系統當機等狀況時,自動將資料庫復原為一致的狀態,而無需和使用者進行互動。這與非關聯式系統形成對比,因為後者經常需要透過冗長的手動程序,檢查系統失敗後隨之而來的資料庫一致性問題。 此功能是由交易記錄檔機制所提供。由於交易完整性是 SQL Server 的基本內建特性,因此無法停用記錄。某些公用程式或維護作業 (如快速 BCP 及 SELECT INTO 等) 僅會執行基本記錄,但即使如此,其仍需擴充配置,才能夠進行復原。 記錄所需要的空間可能相當可觀。例如,在大多數情況下,會記錄每一個更新資料列的更新前與更新後影像,加上所有受影響之索引列的影像。由於所記錄的各列皆會額外記錄固定數量的交易記錄,因此更新資料的記錄空間耗用率,會隨著列寬而不同。較窄列對於特定 UPDATE、DELETE 或 INSERT 所耗用的記錄空間量,可能是所耗資料空間的十倍。而較寬列所耗用的記錄空間量在比例上反而較少。耗用記錄空間是保有交易完整性的必然結果。資料庫管理員必須針對特定的安裝提供足夠的記錄空間。 所需要的記錄空間量會隨不同的因素而改變,因此很難事前精確預估。根據一般的經驗法則,通常會從資料庫大小的 15% 至 30% 開始設定,但實際上的差異卻很大。成功的 SQL Server 安裝通常會執行簡單的實證測試,以概略估計其特定資料及應用程式的記錄空間需求,然後再根據此結果決定記錄檔大小。單憑計算而不進行任何測試,不僅不容易決定記錄檔大小,所得結果亦不精確。 有多項因素因為預測不易,可能會造成記錄空間耗用量的變化。因素之一是查詢最佳化工具。對於特定的 SQL 資料修改陳述式,其存取規劃可能會因為資料的統計分佈不同而時有變動。不同之存取規劃所耗用的記錄空間數量亦不相同。另一個因素則是無可避免的內部資料庫必然分段;這會影響分頁數。我們無需採取任何措施試圖檢查或影響此處理程序,因為 SQL Server 會自動管理使用者的資料。 執行 DBCC CHECKTABLE(syslogs) 即為一例簡單的測試,其會傳回記錄檔中 2048 個位元組資料頁的數量,執行資料修改查詢代表範例前後的結果都會傳回。這項作業可以提供此種查詢所需要的記錄空間概數。通常最好能在為 SQL Server 等關聯式資料庫提供記錄或資料磁碟空間時,於超額方面犯錯。 SQL Server 7.0 及 2000 等級的伺服器,交易記錄檔有能力依需要擴充。成長量可由使用者控制,或利用所有可用的磁碟容量。記錄檔是由數個虛擬記錄檔案組成。這些虛擬記錄檔案的數量及大小是由 SQL Server 決定,無法加以設定。最初建立資料庫時,每個實體記錄檔皆至少有 2 個虛擬記錄檔案。資料庫管理員有時會啟用資料庫的 [truncate log on checkpoint] 選項,以免耗盡記錄空間。這個選項的目的在提供截斷記錄的自動方法,主要用於開發或測試不依賴記錄傾印以備份的資料庫。這個選項不會停用記錄或交易式完整性。它只會造成檢查點處理常式約每隔 60 秒即嘗試截斷記錄。請注意,當您在啟用 [truncate log on checkpoint] 的資料庫中發出手動檢查點命令時,不會截斷記錄檔。雖然儲存程序輸出之 sp_help 的狀態欄中未特別指明,但 tempdb 資料庫一律啟用這個選項。 即使啟用 [truncate log on checkpoint] 選項,仍有許多因素會造成記錄空間耗竭。如下所列:
參考如需有關 SQL Server 2000 的詳細資訊,請參閱下列書籍: Microsoft Corporation Microsoft SQL Server 7.0 系統管理訓練套件
(http://go.microsoft.com/fwlink/?LinkId=8369
)
Microsoft Press, 2001 Microsoft Corporation MCSE 訓練套件:Microsoft SQL Server 2000 系統管理
(http://go.microsoft.com/fwlink/?LinkId=8370
)
Microsoft Press, 2001 Microsoft Corporation Microsoft SQL Server 2000 Resource Kit
(http://go.microsoft.com/fwlink/?LinkId=8371
)
Microsoft Press, 2001 如需詳細資訊,請參閱下列 Microsoft Training & Certification 課程:
Microsoft Corporation 2072 管理 Microsoft SQL Server 2000 資料庫
(http://www.microsoft.com/redirect.asp?PageID=159&PARAM=BOKPSS87&TARGET=/traincert/syllabi/2072afinal.asp)
(英文) 如需 SQL Server 7l0 (含) 以後版本的相關問題,請參閱下列「Microsoft 知識庫」中的文件:
317375?
(http://support.microsoft.com/kb/317375/
)
INF:執行 SQL Server 之電腦上的交易記錄檔意外地擴充或滿溢
這篇文章中的資訊適用於:
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email

回此頁最上方
