{"id":46474,"date":"2026-08-15T20:55:35","date_gmt":"2026-08-15T18:55:35","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=46474"},"modified":"2026-08-15T21:09:41","modified_gmt":"2026-08-15T19:09:41","slug":"when-tempdb-write-latency-points-below-sql-server","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/","title":{"rendered":"When tempdb write latency points below SQL Server"},"content":{"rendered":"\n<p class=\"has-text-align-left wp-block-paragraph\">During a recent performance review on a SQL Server 2019 instance (AlwaysOn Failover Cluster Instance, bare-metal), one number stood out. This post follows the investigation: from a latency figure in a DMV, down the I\/O path to a RAID controller setting nobody had ever chosen.<\/p>\n\n\n\n<h2 id=\"h-the-starting-point-one-number-from-a-health-check\" class=\"wp-block-heading\">The starting point: one number from a health check<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The I\/O statistics of the instance (sys.dm_io_virtual_file_stats) reported the following for tempdb hosted on a local volume D:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><strong>Files<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Type<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Avg write latency<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Writes<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Acceptable <\/strong>t<strong>hreshold<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">8 data files<\/td><td class=\"has-text-align-center\" data-align=\"center\">ROWS<\/td><td class=\"has-text-align-center\" data-align=\"center\">about 380 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\">About 15.8 M each<\/td><td class=\"has-text-align-center\" data-align=\"center\">20 ms<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Log file<\/td><td class=\"has-text-align-center\" data-align=\"center\">LOG<\/td><td class=\"has-text-align-center\" data-align=\"center\">90.6 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\">2.2 M<\/td><td class=\"has-text-align-center\" data-align=\"center\">20 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And the global view of the volume:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><strong>Metric<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Value<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Avg read latency<\/td><td class=\"has-text-align-center\" data-align=\"center\">1.76 ms<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Avg write latency<\/td><td class=\"has-text-align-center\" data-align=\"center\">375.91 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Two details frame the whole investigation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reads are excellent. Writes are 19 times over the threshold. The read path is healthy, the write path is not.<\/li>\n\n\n\n<li>io_stall_write_ms measures the time between I\/O submission and completion, queue time included. A high average does not tell us whether each write is slow or whether writes are waiting behind each other.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">When SQL Server performs a write operation, the request goes through the following (simplified) path:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"240\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png\" alt=\"\" class=\"wp-image-46488\" style=\"width:317px;height:auto\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">What it is not<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The 8 data files show nearly identical latencies and write counts (about 15.8 M each). The tempdb round-robin allocation works perfectly. This is not a hotspot, not a single bad file. The whole volume is affected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The volume D is local to each cluster node. It is not a shared disk (not on the storage array).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Slow media or queuing?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The DMV cannot separate service time from queue time. So we measured the service time directly at idle with WinSAT:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Measure<\/th><th class=\"has-text-align-center\" data-align=\"center\">I\/O profile<\/th><th class=\"has-text-align-center\" data-align=\"center\">Result<\/th><th class=\"has-text-align-center\" data-align=\"center\">IOPS<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Random read<\/td><td class=\"has-text-align-center\" data-align=\"center\">16 KB<\/td><td class=\"has-text-align-center\" data-align=\"center\">451 MB\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\">About 28 900<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Sequential read<\/td><td class=\"has-text-align-center\" data-align=\"center\">64 KB<\/td><td class=\"has-text-align-center\" data-align=\"center\">1 965 MB\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Sequential write<\/td><td class=\"has-text-align-center\" data-align=\"center\">64 KB<\/td><td class=\"has-text-align-center\" data-align=\"center\">964 MB\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Random write<\/td><td class=\"has-text-align-center\" data-align=\"center\">8 KB (SQL Server page profile)<\/td><td class=\"has-text-align-center\" data-align=\"center\">394 MB\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\">About 50 500<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Read latency, maximum<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">3.1 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The media is excellent on all four access profiles. The verdict is simple: the 380 ms are queue time, not service time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A quick calculation confirms it. The DMV counted about 128 M writes over 104 hours of uptime: about 340 writes per second on average. The volume can absorb 50,000. Average utilization: 0.7%. A volume used at 0.7% that shows 376 ms of average latency means one thing: the load is not smooth. It arrives in bursts. During a burst, thousands of I\/Os pile up in the queue, each one waits behind the others and since most of the write volume is concentrated in those bursts they dominate the average.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where the bursts come from<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On this instance, the bursts are produced by sort and hash operations that do not fit in their memory grant and spill to tempdb, mainly during data loads and some heavy analytical queries. The workload side of this story (memory grants, parallelism, NUMA topology) is covered in this blog : <a href=\"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/\">https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, we follow the storage path only: whatever the workload does, a burst of writes should not cost 380 ms per I\/O on a volume this fast.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The invisible layer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When SQL Server writes a page to tempdb, the write goes through this chain:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SQL Server &gt; Windows\/NTFS &gt; driver (SmartPqi.sys) &gt; Smart Array controller &gt; physical SSDs<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Windows never talks to the SSDs. It talks to the RAID controller (an HPE Smart Array P408i-a) which assembles two SAS SSDs into a RAID 1 mirror and presents the result as volume D.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"258\" height=\"105\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-72.png\" alt=\"\" class=\"wp-image-46477\" style=\"width:286px;height:auto\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"109\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-73.png\" alt=\"\" class=\"wp-image-46478\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Reference: <a href=\"https:\/\/support.hpe.com\/connect\/s\/softwaredetails?language=en_US&amp;collectionId=MTX-3d51e7d6b8674f16&amp;tab=releaseNotes\">https:\/\/support.hpe.com\/connect\/s\/softwaredetails?language=en_US&amp;collectionId=MTX-3d51e7d6b8674f16&amp;tab=releaseNotes<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is the key point: every instrument used so far measures through that controller without seeing it. The DMVs measure above it. WinSAT measures above it. Only one question remains open: how is that card configured? And only one tool answers it: the Smart Storage Administrator CLI (ssacli).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"109\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-74.png\" alt=\"\" class=\"wp-image-46479\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-74.png 394w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-74-300x83.png 300w\" sizes=\"auto, (max-width: 394px) 100vw, 394px\" \/><\/figure>\n\n\n\n<h2 id=\"h-factory-settings\" class=\"wp-block-heading\">Factory settings<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nctrl slot=0 show detail\n   \n   Cache Board Present: True\n   Total Cache Size: 2.0\n   Cache Status: Not Configured\n   Battery\/Capacitor Status: OK\n   No-Battery Write Cache: Disabled\n\nctrl slot=0 ld all show detail\n   \n   Logical Drive: 2          (volume D)\n      Fault Tolerance: 1     (RAID 1)\n      Caching: Disabled\n      LD Acceleration Method: Smart Path\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Output<\/th><th class=\"has-text-align-center\" data-align=\"center\">Value<\/th><th class=\"has-text-align-center\" data-align=\"center\">Details<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Cache Board Present \/ Total Cache Size<\/td><td class=\"has-text-align-center\" data-align=\"center\">True \/ 2 GB<\/td><td class=\"has-text-align-center\" data-align=\"center\">The controller has a write cache module (1.8 GB usable)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Battery\/Capacitor Status<\/td><td class=\"has-text-align-center\" data-align=\"center\">OK<\/td><td class=\"has-text-align-center\" data-align=\"center\">Its power-loss protection is healthy<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Cache Status<\/td><td class=\"has-text-align-center\" data-align=\"center\">Not Configured<\/td><td class=\"has-text-align-center\" data-align=\"center\">The cache serves no volume: it is idle<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">LD Acceleration Method (on D:)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Smart Path<\/td><td class=\"has-text-align-center\" data-align=\"center\">The volume uses an I\/O path that bypasses the cache<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Caching (on D:)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Disabled<\/td><td class=\"has-text-align-center\" data-align=\"center\">Confirmation at the logical drive level<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"552\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-75.png\" alt=\"\" class=\"wp-image-46481\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-75.png 780w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-75-300x212.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-75-768x544.png 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">HPE SSD Smart Path is a direct I\/O path: requests skip the RAID firmware stack and go straight to the SSDs. It saves a few dozen microseconds per I\/O which benefits reads. But it is a per-volume switch and it is mutually exclusive with the controller cache. Smart Path is enabled by default on every SSD array (factory default). It&#8217;s reasonable for a read-oriented volume but it was never revisited for a volume hosting tempdb (one of the most write-intensive profiles there is).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The consequence: every write must be applied to both SSDs of the mirror and confirmed before it is acknowledged. There is no absorber anywhere in the chain. When a burst arrives the queue explodes.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><\/th><th class=\"has-text-align-center\" data-align=\"center\">Today (Smart Path)<\/th><th class=\"has-text-align-center\" data-align=\"center\">After (cache enabled)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Reads<\/td><td class=\"has-text-align-center\" data-align=\"center\">Direct path to the SSDs<\/td><td class=\"has-text-align-center\" data-align=\"center\">Classic path (+ a few dozen microseconds) + read cache<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Writes<\/td><td class=\"has-text-align-center\" data-align=\"center\">Wait for both SSDs to confirm<\/td><td class=\"has-text-align-center\" data-align=\"center\">Posted to DRAM: acknowledged in microseconds, mirror written in the background<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Is enabling the write cache safe?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The old advice &#8220;do not enable write caching&#8221; targets a different cache: the volatile DRAM inside the disks themselves which loses acknowledged writes on power failure. That one stays disabled (Drive Write Cache Policy: Disable).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The controller cache is a different story. Microsoft&#8217;s requirement is stable media: an acknowledged write must survive a power failure. This controller qualifies through the flash-backed write cache mechanism:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On power loss, the battery does not store any data. It powers the cache module for a few seconds just long enough for the controller to copy the DRAM content to the flash NAND chip on the module itself. Flash is non-volatile: the data survives without any power (indefinitely).<\/li>\n\n\n\n<li>At reboot the controller restores that data and writes it to the SSDs of the volume before accepting any new I\/O.<\/li>\n\n\n\n<li>If the battery ever fails the controller detects it and automatically falls back to write-through.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There is a second safety belt specific to this volume: tempdb is recreated at every instance startup. Even in the worst theoretical scenario, there is no data anyone would come back for.<\/p>\n\n\n\n<h2 id=\"h-the-possible-fix\" class=\"wp-block-heading\">The possible fix<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three online reversible commands:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nssacli ctrl slot=0 array B modify ssdsmartpath=disable\nssacli ctrl slot=0 ld 2 modify caching=enable\nssacli ctrl slot=0 modify cacheratio=10\/90\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Why cacheratio=10\/90?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This setting splits the controller cache: 10% for reads, 90% for writes. It is not an exotic choice, it is the HPE factory default for a configured cache documented as the best ratio for most workloads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reference: <a href=\"https:\/\/support.hpe.com\/hpesc\/public\/docDisplay?docId=a00019059en_us&amp;page=GUID-EE28F5A4-ADF5-4E27-81AA-8377A267FFA7.html\">https:\/\/support.hpe.com\/hpesc\/public\/docDisplay?docId=a00019059en_us&amp;page=GUID-EE28F5A4-ADF5-4E27-81AA-8377A267FFA7.html<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected result: LD Acceleration Method: Controller Cache on the logical drive, Cache Status: OK on the controller.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To validate we should not rely on the cumulative DMV averages they will stay polluted by history. We should measure deltas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WinSAT after the change: service time should stay excellent (nothing was broken).<\/li>\n\n\n\n<li>sys.dm_io_virtual_file_stats deltas over a defined window covering the load phases.<\/li>\n\n\n\n<li>PerfMon during the load window: Avg. Disk sec\/Write should stay in single digits at the peak of a burst and the queue should drain between bursts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One expectation to set correctly: the cache absorbs bursts but it does not add throughput. All the bytes still land on the same two SSDs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong> these commands have not been implemented. They are proposals only. The change must be reviewed, validated and scheduled by the customer before any implementation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Local tempdb volumes on FCI nodes: a good idea<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Placing tempdb on a local volume in a Failover Cluster Instance is supported since SQL Server 2012 and it is a good design: tempdb is recreated at startup so there is nothing to fail over. It offloads the shared storage and local SSDs deliver excellent performance for one of the hottest write profiles of the instance (our measurements above prove it).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But this choice turns storage health into a per-node responsibility:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the RAID controller configuration on every node. The passive node most likely carries the same factory default. After a failover the problem would silently come back.<\/li>\n\n\n\n<li>Monitor Battery\/Capacitor Status. A dead battery silently disables the write cache and brings the symptom back.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The architecture is right. It just makes your RAID controller part of your database health check.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thank you. <a href=\"https:\/\/www.linkedin.com\/in\/amine-haloui-76968056\/\">Amine Haloui<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>During a recent performance review on a SQL Server 2019 instance (AlwaysOn Failover Cluster Instance, bare-metal), one number stood out. This post follows the investigation: from a latency figure in a DMV, down the I\/O path to a RAID controller setting nobody had ever chosen. The starting point: one number from a health check The [&hellip;]<\/p>\n","protected":false},"author":147,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[199,42,99],"tags":[51],"type_dbi":[],"class_list":["post-46474","post","type-post","status-publish","format-standard","hentry","category-hardware-storage","category-operating-systems","category-sql-server","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.2 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>When tempdb write latency points below SQL Server - dbi Blog<\/title>\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.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"When tempdb write latency points below SQL Server\" \/>\n<meta property=\"og:description\" content=\"During a recent performance review on a SQL Server 2019 instance (AlwaysOn Failover Cluster Instance, bare-metal), one number stood out. This post follows the investigation: from a latency figure in a DMV, down the I\/O path to a RAID controller setting nobody had ever chosen. The starting point: one number from a health check The [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-15T18:55:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-15T19:09:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png\" \/>\n\t<meta property=\"og:image:width\" content=\"220\" \/>\n\t<meta property=\"og:image:height\" content=\"240\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Amine Haloui\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amine Haloui\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/\"},\"author\":{\"name\":\"Amine Haloui\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/221331d69d49c63fca67069b49b813fe\"},\"headline\":\"When tempdb write latency points below SQL Server\",\"datePublished\":\"2026-08-15T18:55:35+00:00\",\"dateModified\":\"2026-08-15T19:09:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/\"},\"wordCount\":1421,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-77.png\",\"keywords\":[\"SQL Server\"],\"articleSection\":[\"Hardware &amp; Storage\",\"Operating systems\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/\",\"name\":\"When tempdb write latency points below SQL Server - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-77.png\",\"datePublished\":\"2026-08-15T18:55:35+00:00\",\"dateModified\":\"2026-08-15T19:09:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/221331d69d49c63fca67069b49b813fe\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-77.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-77.png\",\"width\":220,\"height\":240},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/when-tempdb-write-latency-points-below-sql-server\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"When tempdb write latency points below SQL Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/221331d69d49c63fca67069b49b813fe\",\"name\":\"Amine Haloui\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"caption\":\"Amine Haloui\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/aminehaloui\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"When tempdb write latency points below SQL Server - dbi Blog","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.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/","og_locale":"en_US","og_type":"article","og_title":"When tempdb write latency points below SQL Server","og_description":"During a recent performance review on a SQL Server 2019 instance (AlwaysOn Failover Cluster Instance, bare-metal), one number stood out. This post follows the investigation: from a latency figure in a DMV, down the I\/O path to a RAID controller setting nobody had ever chosen. The starting point: one number from a health check The [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/","og_site_name":"dbi Blog","article_published_time":"2026-08-15T18:55:35+00:00","article_modified_time":"2026-08-15T19:09:41+00:00","og_image":[{"width":220,"height":240,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png","type":"image\/png"}],"author":"Amine Haloui","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Amine Haloui","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/"},"author":{"name":"Amine Haloui","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/221331d69d49c63fca67069b49b813fe"},"headline":"When tempdb write latency points below SQL Server","datePublished":"2026-08-15T18:55:35+00:00","dateModified":"2026-08-15T19:09:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/"},"wordCount":1421,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png","keywords":["SQL Server"],"articleSection":["Hardware &amp; Storage","Operating systems","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/","url":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/","name":"When tempdb write latency points below SQL Server - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png","datePublished":"2026-08-15T18:55:35+00:00","dateModified":"2026-08-15T19:09:41+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/221331d69d49c63fca67069b49b813fe"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-77.png","width":220,"height":240},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/when-tempdb-write-latency-points-below-sql-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"When tempdb write latency points below SQL Server"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/221331d69d49c63fca67069b49b813fe","name":"Amine Haloui","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","caption":"Amine Haloui"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/aminehaloui\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/147"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=46474"}],"version-history":[{"count":21,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46474\/revisions"}],"predecessor-version":[{"id":46504,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46474\/revisions\/46504"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=46474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=46474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=46474"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=46474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}