以下程式碼改寫自胡百敬老師的
Blog,因為它Blog上的T-SQL Code我Copy/Paste執行會出現,我修正了一下,順便寫點註解:
08 | ,num_of_bytes_read bigint |
09 | ,io_stall_read_ms bigint |
11 | ,num_of_bytes_written bigint |
12 | ,io_stall_write_ms bigint |
14 | ,size_on_disk_bytes bigint |
15 | ,file_handle varbinary(8) |
17 | exec sp_MSforeachdb @command1= "use [?];" |
19 | INSERT #t SELECT * FROM ( |
20 | SELECT DB_NAME(database_id) DBName,FILE_NAME(file_id) FileName,* FROM sys.dm_io_virtual_file_stats(DB_ID(N '?' ), NULL )) t; |
22 | SELECT * FROM #t order by DbName; |
- #t是暫存表格
- exec sp_MSforeachdb @command1="use [?];"
此sp名稱很好猜意思,for each db,會去scan每個db,參數@command1帶入一個"use [?];",即sp_MSforeachdb會幫你做use master;use model; use msdb;…依資料庫id進行切換。
- Insert #t Select * From (),將Select結果寫入暫存表,重點在sys.dm_io_virtual_file_stats()的參數DB_ID(N'?'),N是Unicode名命都能正常執行,'?'會依sp_MSforeachdb每一次執行的結果被替代。如果此次是use master,那此次的?就會被替代為DB_ID(N'master')。
- 可以試著執行「SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID(N'Northwind'), Null);
GO」以了解此系統函數。
- 最後,取出結果,刪除暫存表格#t。
Reference:
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。