Note: I finished this article after having the draft ready for some time. It describes a simple storage performance test I did some time ago when I had some spare time and a few SSD disks to spare – a seldom circumstance. Despite Exchange 2013 CU3 and Windows Server Server 2012 R2 now available, I choose not to redo the tests with current versions as WS2012 R2 is more similar to WS2012 than WS 2012 is to WS2008R2 and also due to current time and resource constraints. Therefor, the information collected at the time is used as-is. Also, be sure to check the disclaimer at the end of the article.
After the release of Exchange 2013, the claim was that the new Exchange extensible storage engine (ESE), when compared to Exchange 2010 ESE, would require 50% less IOPS. I wanted to get in indication if there was any truth to that claim utilizing my humble lab setup, consisting of HP’s entry level ML110 G6 servers (x3430, 16GB). Using spare SSD’s as storage, that should provide sufficient IOPS thus not becoming a bottleneck, I ran JetStress 2010 and JetStress 2013 to see if there were any significant differences in the results. As at that time Windows Server 2012 also became available, I ran both versions of JetStress on Windows Server 2008 R2 as well as on Windows Server 2012.
For those unfamiliar with JetStress, it is the tool to verify the performance and stability of Exchange storage solutions and is normally used prior to putting an Exchange server into production when validate the storage solution against required performance criteria. It does this by simulating Exchange I/O patterns for a specified number of users and profiles or you can test the storage throughput in general.
The following parameters were used to perform JetStress tests:
|Mode||Test Disk Subsystem Throughput|
|Thread Count||8 (fixed)|
|Min/Max DB Cache||32 MB / 256 MB|
|Ins / Del / Repl / Read %||40/20/5/35|
|Run Background DB Maintenance||True|
|Databases||1 x 100 GB DB, 3 Copies|
I used a fixed number of threads to rule out differences in JetStress’ auto tuning components and level the 2010 and 2013 playing fields. Also, in JetStress 2013 the thread count is global where in JetStress 2010 it was a per database setting. Since we’re using a single database, this shouldn’t have any impact. The database and logs were storage on a single LUN, using a a dedicated directly attached SSDs with an aligned NTFS partition and 64k cluster size.
The results of the JetStress 2010/2013 tests on Windows Server 2008 R2 / 2012 are contained in the table below (I/O is Total I/O as Database and Logs were put on the same volume). All significant (10%+) deviations are marked in bold.
(Exchange 2010 SP3)
(Exchange 2013 CU1)
(Exchange 2010 SP3)
(Exchange 2013 CU1)
|Overall Test Result||Passed||Passed||Passed||Passed|
|Achieved Transactional IOPS||773,71||899,72||777,34||865,84|
|Database Reads Average Latency (msec)||16,86||11,78||16,06||11,47|
|Database Writes Average Latency (msec)||4,54||3,70||4,32||3,32|
|Database Reads Average Bytes||42.681,78||35.649,30||43.127,88||35.753,71|
|Database Writes Average Bytes||35.404,62||35.312,04||34.894,94||35.520,67|
|Log Reads Average Latency (msec)||12,17||9,34||10,29||8,35|
|Log Writes Average Latency (msec)||0,68||0,57||0,63||0,50|
|Log Reads Average Bytes||232.562,93||232.566,98||232.565,23||232.565,17|
|Log Writes Average Bytes||6.305,28||8.381,35||5.845,82||8.269,47|
|Avg. % Processor Time||3,65||2,83||3,70||2,77|
Some interesting observations:
- Though I didn’t see a 50% IOPS reduction, which could be related to my setup, Exchange 2013 generates significant less IOPS;
- Exchange 2013 shows significant lower average DB+Log latencies for read and write operations;
- Exchange 2013 on WS2012 gives slightly worse IO performance but offers lower DB+Log latencies for read and write operations;
- Exchange 2013 shows a higher DB read read (DB Reads/sec) reading smaller chunks of data (DB Reads Avg. Bytes);
- Stressing the disk subsystem in Windows Server 2012 results in a lower CPU utilization.
Finally, a short disclaimer: This test was only performed to get an indication of differences in storage performance of Exchange Server 2010 SP3 and Exchange Server 2013 CU1 on Windows Server 2008 R2 and Windows Server 2012 when utilizing identical hardware. The JetStress results are purely indicative and not meant to provide guidance or proof related to disk subsystem performance in any form with regards to Exchange Server 2010 versus Exchange Server 2013 on Windows Server 2008 R2 and Windows Server 2012. Your mileage may – and will – vary.