微軟支援團隊常用 Process Monitor (Procmon) 診斷 I/O 行為。本文複現實驗:格式化磁區配置單元 4KB,提交極小交易,觀察實際寫入記錄檔的 Log Block 大小。
USE [Northwind];
GO
CREATE TABLE t1 (c1 INT);
GO
BEGIN TRAN
INSERT INTO t1 VALUES (1);
COMMIT;
Process Name is sqlservr.exe AND Path contains Northwind_Log.ldf AND Operation is WriteFile。Length 欄位即為本次 Log Write 大小。INSERT 產生的記錄極小,但 SQL Server 為確保 WAL (Write-Ahead Logging),會將記錄打包成 Log Block 寫入。WriteFile Length 為 4 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 (文中連結為舊版打包)。