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.

Exchange 2010 Server Role Requirements Role Calculator 20.6

Exchange 2010 LogoIt’s almost a year since the last update, but today the Exchange Team released version 20.6 of the Exchange 2010 Mailbox Role Calculator. The new name is Server Role Requirements, since 20.6 can also dimension Hub Transport or Client Access roles.

Enhancements since version 19.9:

  • Calculator now supports defining server requirements for dedicated Hub Transport and Client Access servers; specifically CPU and memory sizing.
  • Calculator will state how many dedicated Hub Transport and Client Access servers should be deployed in a datacenter.
  • Calculator now includes Hub Transport and Client Access impact on server megacycles and utilization calculations for multi-role deployments.
  • Global catalog processor core calculations were optimized and simplified.
  • Calculator has been rebranded as Exchange 2010 Server Role Requirements Calculator.
  • Fixed column headers in results tables to match Site Resilience scenario

Bug Fixes since version 19.9:

  • Fixed conditional formatting bug when site resilience is not enabled, yet SDC instance input has greater than 0 copies specified.
  • Fixed logic error where calculator would calculate storage requirements when there were more database copies (HA+Lagged) than Mailbox servers.
  • Fixed logic error in calculating remaining active databases during first and second server failures in secondary datacenter for single DAG A/A scenario.
  • Fixed /environment formula for standalone number of database formula.

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

Exchange 2013 Server Role Requirements Calculator 5.6

Ex2013 LogoOnly 10 days after the release of the first public version of the Exchange 2013 Server Role Requirements Calculator, the calculator gets an update. The new version number is 5.6.

Changes since version 5.1:

  • Optimized Volume Design Architecture Formula
  • Fixed Recommended Min Number of GC Cores (Secondary Datacenter)” calculation to use SDC instead of PDC CAS count.
  • Fixed CPU comments and removed erroneous information.
  • Fixed multiple conditional formatting bugs.
  • Fixed problem where this workbook had to be the active workbook at all times.
  • Fixed problem with extra-wide Fail Server button on the distribution worksheet.
  • Enabled variable based tracing.
  • Resolved VBA Divide by Zero error caused by DiskGroup = 0.
  • Fixed problem with lagged copies in conjunction with multiple databases per volume.
  • Fixed missing “\” character in path names in MailboxDatabases.csv file.
  • Fixed problem with WAN failure simulation.
  • Fixed calcNumAMBXServersDC2 to ensure it cannot have more servers that primary site.
  • Fixed calculated IO Multiplication factor formulas to take into consideration IOPS override.
  • Added condition to validate that there are enough copies for multiple databases/volume scenario.
  • Fixed conditional formatting and JBOD storage results when JBOD evaluation is disabled.

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

Exchange 2013 Server Role Requirements Calculator v5.1

Ex2013 LogoIt’s been long wait since the release of Exchange 2013, but today the Exchange Team finally released the first version of the Exchange 2013 Server Role Requirements Calculator. This initial release is numbered version 5.1.

Some of the highlights over the Exchange 2010 calculator, mostly due to changes in the architecture, are:

  • The calculator includes transport sizing (hence the name, I guess);
  • Accommodating for Client Access Server role with sizing for multi-role server deployments;
  • Support for multiple databases / JBOD volumes;
  • Configurable witness server location (primary, secondary or tertiary data center);
  • Configurable server names and database prefixes for generated scripts;
  • Generated scripts include script for DAG creation;
  • Support for single HA, Act/Pas and Act/Act distribution models.

You can download the calculator here. For more information, please consult the documentation here.

Jetstress 2013

Ex2013 LogoIn the list of expected products to accompany Exchange 2013, Microsoft today released JetStress 2013, version 15.0.651.0.

Jetstress is your tool of choice to check the performance and stability of your storage design under load. It simulates Exchange I/O behaviour using Exchange 2013 patterns allowing you to verify dimensioning and validate performance expectations from a database perspective.

Capture

To run JetStress 2013 you need:

  • .NET Framework 4.5
  • ESE.DLL, ESEPerf.dll, ESEPerf.ini, ESEPerf.hxx (copy these from an Exchange 2013 installation source)

Note: The installer currently installs a shortcut named “Exchange JetStress 2010”, but it really is JetStress 2013.

You can download the Jetstress 2013 here.

Exchange 2010 Mailbox Role Calculator 19.9

It’s been almost 3 months since the last update, but today the Exchange Team released version 19.9 of the Exchange 2010 Mailbox Role Calculator.

Enhancements since version 18.9:

  • Revised name of Offline Address Book in MailboxDatabases.csv file
  • Integrated revised CreateMBDatabases.ps1 script that better handles database creation with large numbers of databases
  • Integrated revised CreateMBDatabaseCopies.ps1 script that performs faster
  • Added validation check to ensure message profile has a mailbox size limit
  • Added 4TB disks as a disk selection option
  • Included prompt for 2nd site GC for on DB Export Primary DB List dialog
  • Included prompt for 1st and 2nd site GC on Export Copy DB List dialog
  • Revised default for GC on Export Primary DB List dialog to use FQDN
  • Revised default for Public Folder DB on Export Primary DB List dialog to clarify it is a DB name
  • Added problem explanation text to Distribution tab status line to show why the Calculator considers a configuration invalid
  • Updated CreateMBDatabaseCopies.ps1 to use GC1 and GC2 from export file
  • Added status information to Diskpart.ps1 to show the state of disks before and after script execution

Bug Fixes since version 18.9:

  • Fixed issue with “Number of Active Databases / PDC (After Second PDC Server Failure)” formula to ensure that the PDC cannot have more active databases than possible
  • Removed rounding on calculating number of active databases / server
  • Fixed “DB and Log LUN Design / Server” to accurately calculate /DAG totals when 2 LUNs / Backup Set architecture is chosen
  • Fixed conditional formatting issue with Number of Mailbox Servers when the design utilizes standalone Mailbox servers
  • Fixed bug preventing running multiple StorageCalc instances from running concurrently
  • Fixed bug when saving a workbook under a new name after making changes to the original workbook
  • Fixed “Number of Mailbox Cores Required to Support Activated Databases in Secondary Datacenter” to accurately take into account the correct number of remaining servers
  • Fixed diskpart.ps1 script to ensure it can be re-executed
  • Fixed diskpart.ps1 script to cater for embedded spaces in mountpoints
  • Fixed CreateMBDatabaseCopies.ps1 to read input for Primary site and Secondary site DC’s
  • Fixed Export Primary Databases List to use PF Database instead of PF Server

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