首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 Procmon 監控 SQL Server Log Write 大小——實測 512 Bytes 至 60KB 區間

     編輯:關於SqlServer

微軟支援團隊常用 Process Monitor (Procmon) 診斷 I/O 行為。本文複現實驗:格式化磁區配置單元 4KB,提交極小交易,觀察實際寫入記錄檔的 Log Block 大小。

實驗環境

  • Windows 7 + SQL Server 2012 Developer。
  • 磁區配置單元 (Allocation Unit) = 4KB (NTFS 預設)。
  • 資料庫記錄檔置於該磁區。
磁區配置單元 4KB Procmon 過濾設定

測試腳本

USE [Northwind];
GO
CREATE TABLE t1 (c1 INT);
GO
BEGIN TRAN
INSERT INTO t1 VALUES (1);
COMMIT;

Procmon 設定與擷取

  1. 啟動 Procmon,過濾條件:
     Process Name is sqlservr.exe AND Path contains Northwind_Log.ldf AND Operation is WriteFile。
  2. 清除舊事件,執行上方測試腳本。
  3. 雙擊寫入事件,查看 Detail 標籤的 Length 欄位即為本次 Log Write 大小。

實測結果與理論對照

  • 單筆 INSERT 產生的記錄極小,但 SQL Server 為確保 WAL (Write-Ahead Logging),會將記錄打包成 Log Block 寫入。
  • Log Block 大小範圍:512 Bytes ~ 60 KB。
     - 小交易提交/回滾 → 立即 Flush,形成 512 Bytes (單一磁區) 以上的區塊。
     - 大量交易累積至 60 KB → 強制 Flush。
  • 本實驗中觀察到的 WriteFile Length 為 4 KB (等於配置單元),符合「最小不小於配置單元」的行為。

進階驗證:大量交易觀察 60 KB 邊界

BEGIN TRAN
DECLARE @i INT = 0;
WHILE @i < 100000
BEGIN
    INSERT INTO t1 VALUES (@i);
    SET @i += 1;
END
COMMIT;

Procmon 將顯示多次 WriteFile,長度多為 60 KB (61,440 Bytes),最後一次可能較小。

工具下載

Procmon 官方下載:Microsoft Sysinternals (文中連結為舊版打包)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved