如何用Procmon.exe來監視SQLSERVER的logwrite大小
在微軟亞太區資料庫技術支援組官方部落格裡面,你會發現很多篇文章都用到了Procmon.exe這個工具
今天我也介紹一下這個工具
這個實驗基于這篇文章《SQL server每個日志寫(log write)究竟有多大?》
這個工具的下載下傳位址:https://files.cnblogs.com/lyhabc/ProcessMonitor.zip
文章裡面的測試内容是這樣的
SQL server 日志寫(log write)的最小大小是多少呢?
為此我做了個試驗(Windows 7+SQL server 2012)
1)我把磁盤格式化,最小配置設定單元為4kb
2)我把log 放到磁盤上
3) 我commit一個非常小的事務
為了與文章中的測試環境一樣
我給出這次的資料庫所在盤符的配置設定單元的截圖

測試腳本:
1 USE [Northwind]
2 GO
3 CREATE TABLE t1 ( c1 INT )
4 GO
5 BEGIN TRAN
6 INSERT INTO t1
7 VALUES ( 1 )
8 COMMIT
我們怎麽來測試呢??
第一步:首先我們當然要打開SSMS,然後拷貝腳本進去啦,哈哈
第二步:要找到SQLSERVER的程序編号,因為我的機器安裝了SQL2005,SQL2008,SQL2012
是以需要找一下SQL2005的程序編号是多少
第三步:打開服務管理器,我安裝SQL2005的時候使用的是預設執行個體,那麼找到預設執行個體的SQLSERVER服務,
然後看這個服務用的是哪個帳戶來登入的
SQL2005:system
SQL2008:network service
SQL2012:MSSQL$SQL2012
第四步:打開任務管理器,看一下SQL2005對應的是哪個程序
找到啦,程序編号是1736
當然啦,如果你的電腦隻安裝了一個SQLSERVER,隻有一個預設執行個體就不用這麽麻煩了
第五步:打開Procmon.exe
先簡單介紹一下一些按鈕的作用
捕獲事件,其實這個軟體跟SQLSERVER profiler一樣,捕獲事件就相當于“開始跟蹤”
然後下面的顯示框會一條一條的顯示事件資訊,相當于profiler裡面跟蹤記錄,一條一條記錄顯示給你看
事件種類:有系統資料庫,檔案系統,程序和線程,網絡,性能
就像profiler裡面的建立跟蹤,裡面也有很多的事件給你選擇
第六步:因為我這裡隻是觀察logwrite,是以隻需要監控檔案系統就可以了,系統資料庫、網絡這幾個按鈕不用點選
第七步:過濾:可以過濾的内容比較多,我這裡就選擇隻顯示SQL2005程序的内容
确定之後就可以點選OK了
捕獲和停止捕獲,還有清空顯示屏按鈕
剛才點選确定之後,Procmon.exe會馬上捕獲SQLSERVER所有與檔案系統相關操作的事件
第八步:這個時候需要先停止捕獲,然後再清空顯示屏
開始測試
測試一:
多次執行剛才的測試腳本
1 BEGIN TRAN
2 INSERT INTO t1
3 VALUES ( 1 )
4 COMMIT
但是由于太多與磁盤相關的記錄了,我們怎麽看跟事務日志相關的記錄呢??
我們可以使用高亮功能
添加兩個過濾條件:
operation 是writefile
path是 E:\資料庫檔案2013-10-30\northwnd.ldf
符合上面兩個過濾條件的記錄都将高亮顯示
然後你會看到符合條件的都高亮顯示了
SQL server 日志寫的最小大小都是512bytes,就是一個扇區的大小
跟文章中說的基本一樣
為什麽基本一樣,因為我發現有一條記錄是2.5MB,宋大師說:
上面那些8M和4M的磁盤寫,應該是日志增長所導緻的,是以我覺的不能和log write混淆吧?
測試二:
我們先清空和停止捕獲事件
1 --CREATE TABLE t2 ( c1 INT, c2 CHAR(7000) )
2 --go
3 BEGIN TRAN
4 DECLARE @i INT
5 SET @i = 0
6 WHILE ( @i < 100000 )
7 BEGIN
8 INSERT INTO t2
9 VALUES ( @i, 'dadf' )
10 SET @i = @i + 1
11 END
12 CHECKPOINT
13 COMMIT
14 DELETE FROM t2
将上面的腳本同時開2個視窗運作
重新點解捕獲事件按鈕,開始捕獲事件
可以看到記錄基本上都是大于60K的大小
為什麽會這樣??
大家可以看一下宋大師的這篇文章:再談SQL Server中日志的的作用
總結
其實大家可以用左鍵輕按兩下每條記錄,會打開一個詳細屬性對話框,裡面包含了很多關于程序資訊,堆棧資訊
readfile操作的調用堆棧
程序樹
如有不對的地方,歡迎大家拍磚o(∩_∩)o