I've just been setting up some of our new hardware, and wanted to do some background reading to ensure I use the correct disk partition offset, RAID stripe size, and NTFS allocation unit size to enable the best possible performance for the volumes I'm creating.
You may not of heard about this (or your disk admins may not have heard about this) but on Windows Server 2003 and before, the default partition offset typically causes worse-than-optimal performance – and correcting it can get gains of maybe as high as 30% in terms of IO latency and duration. The SQLCAT team have just published a *fantastic* whitepaper (written by Jimmy May and Denny Lee) which explains the issue simply and clearly and shows you how to correct it. You should checkout the whitepaper at Disk Partition Alignment Best Practices for SQL Server.
The summary is that on Windows Server 2003 and before, the default partition offset is 31.5KB (63 x 512byte disk sectors), which does not align nicely with the common RAID stripe sizes of 64K or 128K, or the optimal NTFS allocation unit size of 64KB. This can lead to having to read/write multiple stripes every so often and a big perf drop. It can be fixed, as detailed in the whitepaper. For volumes *created* on Windows Server 2008, the problem does not exist as it creates a default partition offset of 1024KB – although see the edit below…
In fact Jimmy just published a blog post to help you make the case to your disk admins/customers a few days ago: Disk Partition Alignment (Sector Alignment): Make the Case: Save Hundreds of Thousands of Dollars.
Luckily I'm using Windows Server 2008, which correctly sets the disk partition for the vast majority of cases.
[Edit 06/30/2011: Beware! Even with Windows Server 2008, it's been reported that some I/O subsystem vendors intercept what Windows is trying to do and *still* create partitions with the incorrect offset. Create them and then check – just to be sure.]
Next thing I considered was RAID stripe size and NTFS allocation unit size (previously known as 'cluster size'). Kendal Van Dyke just published an *excellent* blog post series that provides a lot of empirical evidence as to what the best numbers are for the RAID level you're using. This saved me a lot of time. Check out his series at Disk Performance Hands On Series.
The Dell MD3000i units I'm using don't go any lower than 128KB for a RAID stripe size, so the default is fine. Unfortunately, I forgot to set the NTFS allocation unit size to 64KB when creating the partitions in Windows, so I need to recreate the partitions.
A massive thank-you to these guys for saving me a lot of time and hassle. You should go read this stuff too.
4 thoughts on “Are your disk partition offsets, RAID stripe sizes, and NTFS allocation units set correctly?”
Hello Paul,
Great blog post. Thank you for taking the time to sort out the tons of information out there and clarifying the disk partition alignment problem.
I am wondering though, isn’t the default partition offset on Win 2003 servers 31.5 KB? Yes, 63 * 512 will give you 32256 bytes but converted to KB it becomes 31.5 KB.
Please Is it still possible on Win 2019, 2016, 2012 R2 servers
Windows won’t cause the problem any longer, just make sure your I/O subsystem doesn’t either.
yeah, i second the vote for making sure something doesn’t change the palan along the way. just today i’m seeing a lot of 17 kb partition offsets (17408 bytes) on different systems, different orgs. That’s a new one for me. Must be a specific product involved.