Get Disk IO Stats (Summary)
Applicability:
SQL Server 2000: Not Supported
SQL Server 2005: Tested
SQL Server 2008: Tested
SQL Server 2008R2: Tested
SQL Server 2012: Not Tested
Credits:
Author: ChillyDBA
Date: 27 Jun 2012
Description
Retrieves combined disk read and write stats per database on the server, pus a percentage of total
Code
Function:
DROP FUNCTION dbo.udf_GetIOStats_Summary
GO
CREATE FUNCTION dbo.udf_GetIOStats_Summary ()
RETURNS @udf_IOStats_Summary TABLE
(
RowNUM INT,
DatabaseName SYSNAME,
IO_IN_MB DECIMAL(18,2),
Pct DECIMAL(5,2)
)
AS
/***************************************************************
Purpose: To retrieve a per-database summary of IO on the server
since the last restart
IO is the total of the bytes read and written
The following DMVs are used:
sys.dm_io_virtual_file_stats - contains detailed IO information on a per-file basis
Author: ChillyDBA
History: 27 Jun 2012 - Initial Issue
****************************************************************/
BEGIN
;WITH IO_Stats_Summary
AS
(
SELECT
DB_NAME(database_id) AS DatabaseName,
CAST(SUM(num_of_bytes_read + num_of_bytes_written) / 1048576.
AS DECIMAL(12, 2)) AS io_in_mb
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS DM_IO_Stats
GROUP BY database_id
)
INSERT @udf_IOStats_Summary
(
RowNUM,
DatabaseName,
IO_IN_MB,
Pct
)
SELECT
ROW_NUMBER() OVER(ORDER BY io_in_mb DESC) AS RowNum,
DatabaseName,
IO_in_MB,
CAST(IO_in_MB / SUM(IO_in_MB) OVER() * 100
AS DECIMAL(5, 2)) AS Pct
FROM IO_Stats_Summary
ORDER BY RowNum;
RETURN
END
Test Code:
SELECT * FROM dbo.udf_GetIOStats_Summary()