程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server中In-Flight日志究竟是多少

SQL Server中In-Flight日志究竟是多少

編輯:關於SqlServer

在SQL Server中,利用日志的WAL來保證關系數據庫的持久性,但由於硬盤的特性,不可能使得每生成一條日志,就 直接向磁盤寫一次,因此日志會被緩存起來,到一定數據量才會寫入磁盤。這部分已經生成的,卻沒有寫入磁盤的日志 ,就是所謂的In-Flight日志。

在SQL Server中,In-Flight的日志的大小取決於兩個因素,根據Paul Randal的說法,In-Flight日志不能超過60K, 因此In-Flight的日志最大是60K,此外,如果In-Flight日志沒有到60K,如果發生了Commit或Rollback,那麼直接會寫 入磁盤。因此日志最小為512字節,最大為60K,以512字節為單位進行增長。下面我們來看一個例子。

我們首先建立一個簡單的表,循環向其中插入10W的數據,該語句會生成大量的日志,如代碼清單1所示:

BEGIN TRAN
     
DECLARE @i INTEGER
     
SET @i = 0
     
WHILE ( @i < 100000 ) 
    BEGIN
     
        INSERT  INTO Number
        VALUES  ( @i )
     
        SET @i = @i + 1
    END
     
CHECKPOINT
     
COMMIT

代碼清單1.生成大量日志的語句

數據庫我以5M日志為起點,以5M遞增,上面的語句導致日志自動增長,如圖1所示。

圖1.對應的6次日志增長

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved