In order to get information about the amounts of PHYSICAL reads we perform on database files, SQL Server exposes a DMV called sys.dm_io_virtual_file_stats.
In addition to information about number of reads and writes, and the amounts of bytes read and written, we also have the io_stall_read_ms, io_stall_write_ms and io_stall, which show information about the amount of time we have to wait when reading from each file.
Using the DMV columns, the following script takes a snapshot of the DMV, sleeps for 1 minute and then compares the current state to the state of the snapshot, in order to return the latency per read and per write.
/*========================================================================================================================
Description:This script measures the IO latency for reads and writes for every database file in the instance
The script captures a snapshot of sys.dm_io_virtual_file_stats, sleeps for 1 minute and compares
the current state against the snapshot
Author:Matan Yungman, http://www.madeirasql.com/how-to-measure-io-latency-for-database-files
=========================================================================================================================*/
IF OBJECT_ID('tempdb..#io') is not null
DROP TABLE #io
GO
SELECT * INTO #io FROM sys.dm_io_virtual_file_stats(null,null)
WAITFOR DELAY '00:01:00'
SELECT
DB_NAME(a.database_id),
a.file_id,
a.num_of_reads-b.num_of_reads AS num_of_reads,
a.num_of_writes-b.num_of_writes as num_of_writes,
CASE
WHEN a.num_of_reads-b.num_of_reads > 0
THEN
(a.io_stall_read_ms-b.io_stall_read_ms)/(a.num_of_reads-b.num_of_reads)
ELSE 0
END AS read_latency,
CASE
WHEN
a.num_of_writes-b.num_of_writes > 0
THEN
(a.io_stall_write_ms-b.io_stall_write_ms)/(a.num_of_writes-b.num_of_writes)
ELSE 0
END AS write_latency
FROM #io b inner join sys.dm_io_virtual_file_stats(null,null) a
ON a.database_id = b.database_id and a.file_id = b.file_id
ORDER BY DB_NAME(a.database_id)
GOThe post How to Measure IO Latency for Database Files in SQL Server appeared first on .