在微軟亞太區數據庫技術支持組官方博客裏面,你會發現不少篇文章都用到了Procmon.exe這個工具html
今天我也介紹一下這個工具sql
這個實驗基於這篇文章《SQL server每一個日誌寫(log write)究竟有多大?》數據庫
這個工具的下載地址:http://files.cnblogs.com/lyhabc/ProcessMonitor.zip網絡
文章裏面的測試內容是這樣的工具
SQL server 日誌寫(log write)的最小大小是多少呢?性能
爲此我作了個試驗(Windows 7+SQL server 2012)
1)我把磁盤格式化,最小分配單元爲4kb
2)我把log 放到磁盤上
3) 我commit一個很是小的事務測試
爲了與文章中的測試環境同樣spa
我給出此次的數據庫所在盤符的分配單元的截圖線程
測試腳本:3d
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