{"id":581,"date":"2011-04-11T06:37:00","date_gmt":"2011-04-11T06:37:00","guid":{"rendered":"\/blogs\/paul\/post\/How-to-examine-IO-subsystem-latencies-from-within-SQL-Server.aspx"},"modified":"2026-03-30T19:03:34","modified_gmt":"2026-03-31T02:03:34","slug":"how-to-examine-io-subsystem-latencies-from-within-sql-server","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/","title":{"rendered":"How to examine IO subsystem latencies from within SQL Server"},"content":{"rendered":"<p>(Check out our Pluralsight online training course: <em><a href=\"https:\/\/www.pluralsight.com\/courses\/sqlserver-improving-storage-subsystem-performance\" target=\"_blank\" rel=\"noopener noreferrer\">SQL Server: Improving Storage Subsystem Performance<\/a>.)<\/em><\/p>\n<p><strong>Edit: I blogged an update script to capture a snapshot of I\/O latencies in <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/capturing-io-latencies-period-time\/\" target=\"_blank\" rel=\"noopener noreferrer\">this blog post<\/a>.<\/strong><\/p>\n<p>Over the last few months I&#8217;ve been lecturing at classes and conferences about getting SQL Server&#8217;s view of the I\/O subsystem and what latencies it is experiencing, so time for a blog post to help everyone else.<\/p>\n<p>Most SQL Server&#8217;s today are I\/O bound &#8211; that&#8217;s a generally agreed-on statement by DBAs and consultants in the field. This means that the major factor in server performance is its ability to perform I\/O operations quickly. If the I\/O subsystem cannot keep up with the demand being placed on it, then the SQL Server workload will suffer performance problems.<\/p>\n<p>Now, saying that, one trap that many people fall into is equating increased I\/O subsystem latencies with poor I\/O subsystem performance. This is often not the case at all. It&#8217;s usually the case that the I\/O subsystem performs fine when the designed-for I\/O workload is happening, but\u00a0becomes the performance bottleneck\u00a0when the I\/O workload increases past the I\/O subsystem design point. The I\/O workload increase is what&#8217;s causing the problem, not the I\/O subsystem &#8211; if you design an I\/O subsystem to support 1000 IOPS (I\/O operations per second &#8211; and making sure you&#8217;re using the right I\/O size and the workload characteristics make sense to be defined in terms of the number of random IOPS) and SQL Server is trying to push 2000 IOPS, performance is going to suffer.<\/p>\n<p>If you find that I\/O latency has increased, look to a change in SQL Server behavior before blaming the I\/O subsystem. For instance:<\/p>\n<ul>\n<li>Query plan changes from out-of-date statistics, code changes, implicit conversions, poor indexing\u00a0that cause table scans rather than index seeks<\/li>\n<li>Additional indexes being created that cause increased index maintenance workload and logging<\/li>\n<li>Access pattern\/key changes that cause page splits and hence extra page reads\/writes and logging<\/li>\n<li>Adding change data capture or change tracking that causes extra writes and logging<\/li>\n<li>Enabling snapshot isolation that causes tempdb I\/Os, plus potentially page splits<\/li>\n<li>Decreased server memory leading to a smaller buffer pool and increased lazy writer and read activity<\/li>\n<\/ul>\n<p>And a whole host of other reasons can lead to an increased I\/O workload where it&#8217;s not the I\/O subsystem&#8217;s fault.<\/p>\n<p>On the other hand, however, it may very well be the I\/O subsystem that has an issue if the SQL Server workload is the same. A SAN administrator may have decided to give some of the space on one of the SQL Server LUNs to another server, which can lead to an overload.<\/p>\n<p>Using performance counters, you can see at the physical disk level what the latencies are (looking at the <em>Avg. Disk sec\/Read<\/em> and <em>Avg. Disk sec\/Write<\/em> counters) but if you have your databases spread across a few LUNs, that doesn&#8217;t help you pinpointing which database files are experiencing latency issues and driving the most I\/Os to the I\/O subsystem.<\/p>\n<h1>sys.dm_io_virtual_file_stats<\/h1>\n<p>This is where <em><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms190326.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">sys.dm_io_virtual_file_stats<\/a><\/em> comes in. It was introduced in SQL Server 2005 as a beefed-up replacement for <em>fn_virtualfilestats<\/em> and shows you how many I\/Os have occurred, with latencies for all files. You can give it a database ID and a file ID, but I found it most useful to look at all the files on the server and order by one of the statistics.<\/p>\n<p>Here&#8217;s the default output (with some column names changed slightly to make things fit nicely):<\/p>\n<pre class=\"brush: sql; gutter: true; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT * FROM sys.dm_io_virtual_file_stats (NULL, NULL);\r\nGO\r\n<\/pre>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\ndb_id file_id sample_ms reads bytes_read io_stall_read_ms writes bytes_written io_stall_write_ms io_stall size_on_disk_bytes file_handle\r\n----- ------- --------- ----- ---------- ---------------- ------ ------------- ----------------- -------- ------------------ ------------------\r\n1\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a052\u00a0\u00a0\u00a0\u00a03227648\u00a0\u00a0\u00a0\u00a058\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10\u00a0\u00a0\u00a0\u00a0\u00a090112\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a012\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 70\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0515964928\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x000000000000013C\r\n1\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a055\u00a0\u00a0\u00a0\u00a01241088\u00a0\u00a0\u00a0\u00a036\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 28\u00a0\u00a0\u00a0\u00a0\u00a0122880\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0115\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 151\u00a0\u00a0\u00a0\u00a0\u00a0 12648448\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000474\r\n2\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a022\u00a0\u00a0\u00a0\u00a01261568\u00a0\u00a0\u00a0\u00a022\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0147456\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 23\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8388608\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x000000000000065C\r\n2\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a06\u00a0\u00a0\u00a0\u00a0\u00a0385024\u00a0\u00a0\u00a0\u00a0\u00a02\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0154112\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a03\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 524288\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000660\r\n3\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a031\u00a0\u00a0\u00a0\u00a01859584\u00a0\u00a0\u00a0\u00a018\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 18\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1310720\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000524\r\n3\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a06\u00a0\u00a0\u00a0\u00a0\u00a0385024\u00a0\u00a0\u00a0\u00a0\u00a05\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a016384\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 524288\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x000000000000056C\r\n4\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a0139\u00a0\u00a0\u00a08175616\u00a0\u00a0\u00a0\u00a0369\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0106496\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a045\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 414\u00a0\u00a0\u00a0\u00a0\u00a0 260767744\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000958\r\n4\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a0136\u00a0\u00a0\u00a0712704\u00a0\u00a0\u00a0\u00a0\u00a0485\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a053248\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a025\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 510\u00a0\u00a0\u00a0\u00a0\u00a0 104595456\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00000000000009F0\r\n5\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a020\u00a0\u00a0\u00a0\u00a01138688\u00a0\u00a0\u00a0\u00a0204\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 204\u00a0\u00a0\u00a0\u00a0\u00a0 419430400\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000980\r\n5\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a013\u00a0\u00a0\u00a0\u00a0411136\u00a0\u00a0\u00a0\u00a0\u00a0466\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02048\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a013\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 479\u00a0\u00a0\u00a0\u00a0\u00a0 104857600\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000A44\r\n6\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a015\u00a0\u00a0\u00a0\u00a0811008\u00a0\u00a0\u00a0\u00a0\u00a081\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 89\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1310720\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000954\r\n6\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a07\u00a0\u00a0\u00a0\u00a0\u00a0386560\u00a0\u00a0\u00a0\u00a0\u00a089\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a011264\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a080\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 169\u00a0\u00a0\u00a0\u00a0\u00a0 516096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00000000000009EC\r\n7\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a015\u00a0\u00a0\u00a0\u00a0811008\u00a0\u00a0\u00a0\u00a0\u00a080\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a09\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 89\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1310720\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000970\r\n7\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a07\u00a0\u00a0\u00a0\u00a0\u00a0386560\u00a0\u00a0\u00a0\u00a0\u00a0130\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a09216\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a017\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 147\u00a0\u00a0\u00a0\u00a0\u00a0 516096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00000000000009B4\r\n8\u00a0\u00a0\u00a0\u00a0\u00a01\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a016\u00a0\u00a0\u00a0\u00a0876544\u00a0\u00a0\u00a0\u00a0\u00a037\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0103\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 140\u00a0\u00a0\u00a0\u00a0\u00a0 136577024\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x0000000000000988\r\n8\u00a0\u00a0\u00a0\u00a0\u00a02\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14433009\u00a0\u00a09\u00a0\u00a0\u00a0\u00a0\u00a0229888\u00a0\u00a0\u00a0\u00a0\u00a011\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a010752\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a059\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 70\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5242880\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00000000000009E4\r\n.\r\n.\r\n<\/pre>\n<p>This isn&#8217;t that useful because a) I don&#8217;t have database IDs and file paths memorized, and b) it gives aggregate latencies (<em>io_stall_read_ms<\/em> and <em>io_stall_write_ms<\/em>).<\/p>\n<h1>Viewing Aggregate Information<\/h1>\n<p>What I usually do is use the script below &#8211; part of my standard set of scripts I use when doing a server health check for a client. It&#8217;s based in part on code from by good friend Jimmy May (<a href=\"http:\/\/blogs.msdn.com\/b\/jimmymay\/\" target=\"_blank\" rel=\"noopener noreferrer\">blog<\/a>|<a href=\"https:\/\/twitter.com\/aspiringgeek\" target=\"_blank\" rel=\"noopener noreferrer\">twitter<\/a>), with a bunch of tweaks. It allows me to filter on read or write latencies and it joins with <em><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms186782.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">sys.master_files<\/a><\/em> to get database names and file paths.<\/p>\n<pre class=\"brush: sql; gutter: true; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    &#x5B;ReadLatency] =\r\n        CASE WHEN &#x5B;num_of_reads] = 0\r\n            THEN 0 ELSE (&#x5B;io_stall_read_ms] \/ &#x5B;num_of_reads]) END,\r\n    &#x5B;WriteLatency] =\r\n        CASE WHEN &#x5B;num_of_writes] = 0\r\n            THEN 0 ELSE (&#x5B;io_stall_write_ms] \/ &#x5B;num_of_writes]) END,\r\n    &#x5B;Latency] =\r\n        CASE WHEN (&#x5B;num_of_reads] = 0 AND &#x5B;num_of_writes] = 0)\r\n            THEN 0 ELSE (&#x5B;io_stall] \/ (&#x5B;num_of_reads] + &#x5B;num_of_writes])) END,\r\n    &#x5B;AvgBPerRead] =\r\n        CASE WHEN &#x5B;num_of_reads] = 0\r\n            THEN 0 ELSE (&#x5B;num_of_bytes_read] \/ &#x5B;num_of_reads]) END,\r\n    &#x5B;AvgBPerWrite] =\r\n        CASE WHEN &#x5B;num_of_writes] = 0\r\n            THEN 0 ELSE (&#x5B;num_of_bytes_written] \/ &#x5B;num_of_writes]) END,\r\n    &#x5B;AvgBPerTransfer] =\r\n        CASE WHEN (&#x5B;num_of_reads] = 0 AND &#x5B;num_of_writes] = 0)\r\n            THEN 0 ELSE\r\n                ((&#x5B;num_of_bytes_read] + &#x5B;num_of_bytes_written]) \/\r\n                (&#x5B;num_of_reads] + &#x5B;num_of_writes])) END,\r\n    LEFT (&#x5B;mf].&#x5B;physical_name], 2) AS &#x5B;Drive],\r\n    DB_NAME (&#x5B;vfs].&#x5B;database_id]) AS &#x5B;DB],\r\n    &#x5B;mf].&#x5B;physical_name]\r\nFROM\r\n    sys.dm_io_virtual_file_stats (NULL,NULL) AS &#x5B;vfs]\r\nJOIN sys.master_files AS &#x5B;mf]\r\n    ON &#x5B;vfs].&#x5B;database_id] = &#x5B;mf].&#x5B;database_id]\r\n    AND &#x5B;vfs].&#x5B;file_id] = &#x5B;mf].&#x5B;file_id]\r\n-- WHERE &#x5B;vfs].&#x5B;file_id] = 2 -- log files\r\n-- ORDER BY &#x5B;Latency] DESC\r\n-- ORDER BY &#x5B;ReadLatency] DESC\r\nORDER BY &#x5B;WriteLatency] DESC;\r\nGO\r\n<\/pre>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nReadLatency WriteLatency Latency AvgBPerRead AvgBPerWrite AvgBPerTransfer Drive DB\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 physical_name\r\n----------- ------------ ------- ----------- ------------ --------------- ----- ----------------------- ------------------------------------------\r\n2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 103\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 54784\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 52043\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 HotSpot\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\HotSpot_data.mdf\r\n7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 48\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0 63061\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5632\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 54857\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 DemoCorruptSystemTables C:\\SQLskills\\corrupt_log.LDF\r\n32\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 41\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 33\u00a0\u00a0\u00a0\u00a0\u00a0 43861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2048\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 39680\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 DemoSystemIndex3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\DemoSystemIndex3_LOG.ldf\r\n27\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 40\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 28\u00a0\u00a0\u00a0\u00a0\u00a0 43861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1024\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 39577\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 DemoSystemIndex5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\DemoSystemIndex5_LOG.ldf\r\n23\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 39\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 24\u00a0\u00a0\u00a0\u00a0\u00a0 43861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7168\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 40192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 DemoSystemIndex4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\DemoSystemIndex4_LOG.ldf\r\n7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 38\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10\u00a0\u00a0\u00a0\u00a0\u00a0 43861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4608\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 39936\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 DemoSystemIndex1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\DemoSystemIndex1_LOG.ldf\r\n11\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 25\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12\u00a0\u00a0\u00a0\u00a0\u00a0 43861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7168\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 40192\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 FSWaits\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\FSWaits_log.ldf\r\n12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 20\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0 55222\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6656\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 49152\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 newdatabase\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\newdatabase_log.LDF\r\n12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 20\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 15\u00a0\u00a0\u00a0\u00a0\u00a0 55222\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2816\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 36165\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 LockResDemo\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\LockResDemo_log.LDF\r\n14\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 15\u00a0\u00a0\u00a0\u00a0\u00a0 45933\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2816\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 30254\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 TempdbTest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\TempdbTest_log.LDF\r\n1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 25543\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2688\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 18510\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 HotSpot\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\HotSpot_log.ldf\r\n40\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 39\u00a0\u00a0\u00a0\u00a0\u00a0 31625\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7680\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 29915\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 RecompileTest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\RecompileTest_log.ldf\r\n9\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10\u00a0\u00a0\u00a0\u00a0\u00a0 51858\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7680\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 46336\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 DemoFatalCorruption1\u00a0\u00a0\u00a0 D:\\SQLskills\\DemoFatalCorruption1_log.ldf\r\n35\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 34\u00a0\u00a0\u00a0\u00a0\u00a0 31625\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2048\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 29513\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\u00a0\u00a0\u00a0 GUIDTest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D:\\SQLskills\\GUIDTest_log.ldf\r\n12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 13\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12\u00a0\u00a0\u00a0\u00a0\u00a0 16861\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1024\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 15872\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\u00a0\u00a0\u00a0 FNDBLogTest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 C:\\SQLskills\\FNDBLogTest_log.LDF\r\n.\r\n.\r\n<\/pre>\n<p>This is much more useful as it allows me to quickly see where the read and write hot spots are and then drill into a database to see what&#8217;s going on, and if nothing out of the ordinary, ask the SAN admin to move those hot spot\u00a0files to dedicated and\/or faster storage.<\/p>\n<h1>Making Use Of This Information<\/h1>\n<p>Beware: This information is the aggregate of all I\/Os performed since the database was brought online, so the I\/O times reported by the script are averages. The longer the time the data set covers, the more likely that transient latency spikes will be masked. The best way to use this data for analysis is to periodically capture snapshots of the <em>sys.dm_db_io_virtual_file stats<\/em> data and then examine the averages over that small time period. That way you&#8217;ll be able to see latency spikes. [Edit 2014: I blogged a script to capture a snapshot of I\/O latencies <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/capturing-io-latencies-period-time\/\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.]<\/p>\n<p>One question I&#8217;m sure you&#8217;re going to ask is &#8220;what is an acceptable read or write latency?&#8221; and the answer is a big &#8220;it depends!&#8221;. It depends on the I\/O subsystem and how it&#8217;s been configured. The key is producing a performance baseline for when things are running acceptably well and then seeing where the results from the DMV deviate from your baseline. On well-configured\u00a0storage which isn&#8217;t being overloaded I&#8217;d expect to see single-digit ms for either read or write latency, but this will vary based on the rotation speed and technology of the drives (SCSI vs SATA vs SSD etc).<\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Check out our Pluralsight online training course: SQL Server: Improving Storage Subsystem Performance.) Edit: I blogged an update script to capture a snapshot of I\/O latencies in this blog post. Over the last few months I&#8217;ve been lecturing at classes and conferences about getting SQL Server&#8217;s view of the I\/O subsystem and what latencies it [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38,53,66],"tags":[],"class_list":["post-581","post","type-post","status-publish","format-standard","hentry","category-example-scripts","category-io-subsystems","category-performance-tuning"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL Server IO Latency<\/title>\n<meta name=\"description\" content=\"How to easily pinpoint I\/O bottlenecks from within SQL Server.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server IO Latency\" \/>\n<meta property=\"og:description\" content=\"How to easily pinpoint I\/O bottlenecks from within SQL Server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2011-04-11T06:37:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-31T02:03:34+00:00\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/\",\"name\":\"SQL Server IO Latency\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"datePublished\":\"2011-04-11T06:37:00+00:00\",\"dateModified\":\"2026-03-31T02:03:34+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"description\":\"How to easily pinpoint I\/O bottlenecks from within SQL Server.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to examine IO subsystem latencies from within SQL Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\",\"name\":\"Paul S. Randal\",\"description\":\"In Recovery...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\",\"name\":\"Paul Randal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"caption\":\"Paul Randal\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/paul\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server IO Latency","description":"How to easily pinpoint I\/O bottlenecks from within SQL Server.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server IO Latency","og_description":"How to easily pinpoint I\/O bottlenecks from within SQL Server.","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/","og_site_name":"Paul S. Randal","article_published_time":"2011-04-11T06:37:00+00:00","article_modified_time":"2026-03-31T02:03:34+00:00","author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/","name":"SQL Server IO Latency","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"datePublished":"2011-04-11T06:37:00+00:00","dateModified":"2026-03-31T02:03:34+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"description":"How to easily pinpoint I\/O bottlenecks from within SQL Server.","breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/how-to-examine-io-subsystem-latencies-from-within-sql-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"How to examine IO subsystem latencies from within SQL Server"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/","name":"Paul S. Randal","description":"In Recovery...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce","name":"Paul Randal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","caption":"Paul Randal"},"sameAs":["http:\/\/3.209.169.194\/blogs\/paul"],"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/comments?post=581"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/581\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}