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.

Exchange 2013 Server Role Requirements Calculator 6.1


Excel-2013[1]The Exchange 2013 Server Role Requirements Calculator received an update to reflect changed incorporated in Exchange 2013 CU2, like the increased maximum number of databases. The new version number is 6.1.

Changes since version 5.9:

  • Fixed operator mistake in calcNumActiveDBsSF formula
  • Fixed missed validation scenario where the calculator could recommend a copy count that could not be deployed on the custom disk architecture
  • Optimized remaining servers formula
  • Fixed an issue where single datacenter, multiple databases per volume architecture with lagged copies didn’t calculate the correct number of
    copies/volume
  • Fixed VirtCPUFactor reference
  • Various comment changes
  • Improved cell highlights for insufficient disk capacity on storage design tab
  • Added additional storage capacities – 1.2TB, 6TB and 8TB
  • Fixed database count validation logic to take into consideration dedicated lagged copy servers

You can download the calculator here. For more information please consult the release notes and read me

Exchange 2013 Server Role Requirements Calculator 5.9


Excel-2013[1]The Exchange 2013 Server Role Requirements Calculator received an update to reflect changed incorporated in Exchange 2013 CU2, like the increased maximum number of databases. The new version number is 5.9.

Changes since version 5.8:

  • DAG script fix

Changes since version 5.6:

  • Fixed VBA error “The object invoked is disconnected from its client” error when recalculating Distribution tab
  • Added validation check for per-server database limit
  • Improved conditional formatting for JBOD disk capacity/type alerts
  • Fixed conditional formatting bug on custom databases input
  • Fixed bugs and improved the CreateMBDatabases.ps1 and CreateDAG.ps1 scripts
  • Fixed disk function display name problem
  • Revised calulation of TotDBVolSpaceDAG on Volume Requirements tab to account for multiple databases per volume
  • Fixed bug when custom database size is set to zero
  • Fixed number of volumes for 48 copies/server in 2 volumes/backup set scenario
  • Removed 2nd site dependency for setting Alt FSW
  • Added support for 100 databases / server
  • Fixed bug with circular logging export
  • Fixed transcript bug in CreateMBDatabaseCopies script
  • Adjusted CI memory calculation for corner case scenarios
  • Fixed Shadow Effect calculation
  • Fixed mistakes in comments
  • Disabled AutoReseed when Log Isolation is enabled

You can download the calculator here. For more information please consult the release notes and read me

Exchange 2010 Server Role Requirements Calculator 20.8


Exchange 2010 LogoA short while after the release of the 20.7 update, the Exchange Team released another minor update of the Exchange 2010 Server Role Requirements Calculator, bringing the version number to 20.8.

Compared to 20.7, this version contains a fix for secondary CAS CPU calculations.

You can download the calculator here. For more information please consult the changeblog or usage instructions.

Exchange 2010 Server Role Requirements Calculator 20.7


Exchange 2010 LogoThe Exchange Team released version 20.7 of the Exchange 2010 Server Role Requirements Calculator, which contains a small bug fix.

Bug Fixes since version 20.6:

  • Fixed CAS and HT memory calculations formulas to not report #NAME when designing site resilient topologies.

You can download the calculator here. For more information please consult the changeblog or usage instructions.