Exchange ESE Performance: 2010 versus 2013

chartNote: 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
Lazy Commits 70%
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.

JetStress Version 14.2.225.17
(2010)
15.0.658.4
(2013)
14.2.225.17
(2010)
15.0.658.4
(2013)
ESE.DLL 14.3.123.2
(Exchange 2010 SP3)
15.0.620.0
(Exchange 2013 CU1)
14.3.123.2
(Exchange 2010 SP3)
15.0.620.0
(Exchange 2013 CU1)
Operating System 6.1.7600
(WS2008R2)
6.1.7600
(WS2008R2)
6.2.9200.0
(WS2012)
6.2.9200.0
(WS2012)
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/sec 397,82 506,96 396,41 490,70
Database Writes/sec 392,75 398,87 398,76 381,34
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/sec 8,97 9,03 8,36 8,84
Log Writes/sec 171,72 172,59 172,94 173,15
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
JetStress Report Link Link Link Link

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.

You can download the JetStress tool here to test your storage solution; monitor my toolkit page for any updates. The JetStress 2013 Field Guide can be found here.

7 thoughts on “Exchange ESE Performance: 2010 versus 2013

  1. Pingback: stress | IT?

  2. Pingback: NeWay Technologies – Weekly Newsletter #74 – December 19, 2013 | NeWay

  3. Pingback: NeWay Technologies – Weekly Newsletter #74 – December 20, 2013 | NeWay

  4. Pingback: interesting things i have seen on the internet 30/12/2013 | 503 5.0.0 polite people say HELO

  5. Pingback: Exchange & File System | EighTwOne (821)

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.