SELECT mf.*, volume_mount_point, 1.0 * total_bytes / POWER(1024, 3) AS DISK_SIZE_GB, 1.0 * available_bytes / POWER(1024, 3) AS FREE_SIZE_GB, 100 * (1 - 1.0 * available_bytes/total_bytes) PERCENT_USED FROM sys.master_files AS mf CROSS APPLY sys.dm_os_volume_stats(database_id, file_id); WITH disk_activity AS (SELECT LEFT(mf.physical_name, 2) AS Drive, SUM(num_of_reads) AS num_of_reads, SUM(io_stall_read_ms) AS io_stall_read_ms, SUM(num_of_writes) AS num_of_writes, SUM(io_stall_write_ms) AS io_stall_write_ms, SUM(num_of_bytes_read) AS num_of_bytes_read, SUM(num_of_bytes_written) AS num_of_bytes_written, SUM(io_stall) AS io_stall FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS vfs INNER JOIN sys.master_files AS mf WITH (NOLOCK) ON vfs.database_id = mf.database_id AND vfs.file_id = mf.file_id GROUP BY LEFT(mf.physical_name, 2)) SELECT (SELECT sqlserver_start_time FROM sys.dm_os_sys_info) AS SINCE, Drive AS DISK_DRIVE, CASE WHEN num_of_reads = 0 THEN 0 ELSE (io_stall_read_ms/num_of_reads) END AS READ_LATENCY, CASE WHEN io_stall_write_ms = 0 THEN 0 ELSE (io_stall_write_ms/num_of_writes) END AS WRITE_LATENCY, CASE WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0 ELSE (io_stall/(num_of_reads + num_of_writes)) END AS GLOBAL_LATENCY, CASE WHEN num_of_reads = 0 THEN 0 ELSE (num_of_bytes_read/num_of_reads) END AS AVG_BYTES_PER_READ, CASE WHEN io_stall_write_ms = 0 THEN 0 ELSE (num_of_bytes_written/num_of_writes) END AS AVG_BYTES_PER_WRITE, CASE WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0 ELSE ((num_of_bytes_read + num_of_bytes_written)/(num_of_reads + num_of_writes)) END AS AVG_BYTES_PER_TRANSFER FROM disk_activity AS tab ORDER BY GLOBAL_LATENCY OPTION (RECOMPILE);