Workload Management in Exchange 2013

Workload Management (WLM) is a great new feature that was introduced with Exchange 2013 (well, ok to be fair Exchange 2010 introduced the concept of User throttling. Exchange 2013 simply builds on that). The function of WLM is basically to preserve the user experience by throttling other processes. It is comprised of both User-based throttling (not discussed on this post as it is detailed on TechNet fairly well) and System throttling. To achieve this, different workloads in Exchange are assigned different priorities. For example, mailbox moves are a lower priority workload than, say, Transport (after all, it IS important to get that new email from your favorite coupon site, right?!?).

Starting with RTM and up through CU5, managing System Workload Management settings were available via the following cmdlets

*-ResourcePolicy
*-WorkloadManagementPolicy
*-WorkloadPolicy

WorkloadPolicy defined the classifications for various different workloads. Examples of Classifications include InternalMaintenance, CustomerExpectation, Discretionary and Urgent.

ResourcePolicy defined the Thresholds for the various classifications upon which those workload types would begin to be throttled (micro-delayed).

WorkloadManagementPolicy simply links the two together.

However, starting with CU6, these cmdlets disappeared, and the TechNet links were removed and replaced with this simple statement found here

NoteNote:

The *-ResourcePolicy, *-WorkloadManagementPolicy and *-WorkloadPolicy system workload management cmdlets have been deprecated. System workload management settings should be customized only under the direction of Microsoft Customer Service and Support.

That is all fine and good (after all, I work in CSS!). But for a while, even I didn’t know how to view what the current settings were!!!

Alas – nothing (well, ALMOST nothing) can remain hidden forever. And so I found that the System workload management settings are now visible by using Get-ExchangeDiagnosticInfo. Now I do want to add a caveat here that this blog post will not provide information on how to modify System Workload Policies. However, I felt like it was important to be able to view what the current settings are so that you can understand why certain workloads might end up getting throttled.

If you haven’t already had the pleasure of using Get-ExchangeDiagnosticInfo, there is a lot of information available. I won’t delve in to everything that can be retrieved, but rather will focus on the System Workload policy-related information.

The general syntax to view System Workload policy information is

Get-ExchangeDiagnosticInfo –server <server> -process MSExchangeMailboxAssistants –Component SystemWorkloadManager –Argument policy

However – you will probably notice that the output from this cmdlet is XML format, which is, well, ugly to read. Lets clean it up a little, shall we? Define a variable for your command, and specify the format as XML so Powershell can format it.

[xml]$diag = Get-ExchangeDiagnosticInfo –server <server> -process MSExchangeMailboxAssistants –Component SystemWorkloadManager –Argument policy

Now that we have the data stored in memory, we can look at the components. The Policy is actually comprised of several sub-components. Lets look at the Resource policy portion first. This shows the Metric types (core resources that we measure the health of)

$diag.diagnostics.components.systemworkloadmanager.policy.resourcepolicy

MetricType

MaxConcurrency

ResourceMetricPolicy

ActiveDirectoryReplicationLatency

1024

{ResourceMetricPolicy,

MdbLatency

3

{ResourceMetricPolicy,

Processor

1024

{ResourceMetricPolicy,

MdbReplication

3

{ResourceMetricPolicy,

CiAgeOfLastNotification

3

{ResourceMetricPolicy,

MdbAvailability

3

{ResourceMetricPolicy,

DiskLatency

10

{ResourceMetricPolicy,

Now notice that the ResourcePolicy actually has a property that is multivalued. We can look at that in more detail and see that each metric type has different values for each classification type. This is what allows workloads with a classification of a higher priority to continue working while those with a lower priority are throttled (micro-delayed).

$diag.diagnostics.components.systemworkloadmanager.policy.resourcepolicy.resourcemetricpolicy | ft

MetricType

Classification

UnderloadedThreshold

OverloadedThreshold

CriticalThreshold

ActiveDirectoryReplicationLatency

Discretionary

5

25

45

ActiveDirectoryReplicationLatency

InternalMaintenance

5

25

45

ActiveDirectoryReplicationLatency

CustomerExpectation

5

30

50

ActiveDirectoryReplicationLatency

Urgent

5

60

100

MdbLatency

Discretionary

10000

20000

70000

MdbLatency

InternalMaintenance

10000

20000

70000

MdbLatency

CustomerExpectation

15000

30000

70000

MdbLatency

Urgent

25000

50000

100000

Processor

Discretionary

70

80

100

Processor

InternalMaintenance

75

85

100

Processor

CustomerExpectation

80

90

100

Processor

Urgent

100

100

100

MdbReplication

Discretionary

2097152

6291456

52428800

MdbReplication

InternalMaintenance

2097152

6291456

52428800

MdbReplication

CustomerExpectation

2097152

6291456

52428800

MdbReplication

Urgent

2097152

6291456

52428800

CiAgeOfLastNotification

Discretionary

60

180

240

CiAgeOfLastNotification

InternalMaintenance

120

180

300

CiAgeOfLastNotification

CustomerExpectation

180

240

600

CiAgeOfLastNotification

Urgent

240

300

600

MdbAvailability

Discretionary

11534336

105906176

1048576000

MdbAvailability

InternalMaintenance

11534336

105906176

1048576000

MdbAvailability

CustomerExpectation

11534336

105906176

1048576000

MdbAvailability

Urgent

11534336

105906176

1048576000

DiskLatency

Discretionary

10

20

30

DiskLatency

InternalMaintenance

10

20

30

DiskLatency

CustomerExpectation

10

20

30

DiskLatency

Urgent

50

50

50

Finally, we can view the workload policy, which provides the list of each defined workload type and the respective classification.

$diag.diagnostics.components.systemworkloadmanager.policy.workloadpolicy

WorkloadType

Classification

MaxConcurrency

MailboxReplicationService

Discretionary

1024

ELCAssistant

InternalMaintenance

1024

JunkEmailOptionsCommitterAssistant

CustomerExpectation

1024

CalendarRepairAssistant

InternalMaintenance

1024

SharingPolicyAssistant

InternalMaintenance

1024

TopNAssistant

InternalMaintenance

1024

CalendarSyncAssistant

InternalMaintenance

1024

UMReportingAssistant

InternalMaintenance

1024

InferenceTrainingAssistant

InternalMaintenance

1024

StoreMaintenanceAssistant

InternalMaintenance

1024

PublicFolderAssistant

Discretionary

1024

DirectoryProcessorAssistant

InternalMaintenance

1024

PowerShell

InternalMaintenance

1024

PowerShellForwardSync

CustomerExpectation

1024

PowerShellBackSync

CustomerExpectation

1024

PowerShellGalSync

InternalMaintenance

1024

PowerShellLowPriorityWorkFlow

InternalMaintenance

1024

PowerShellDiscretionaryWorkFlow

Discretionary

1024

OABGeneratorAssistant

CustomerExpectation

1

Ews

InternalMaintenance

1024

Eas

CustomerExpectation

1024

Domt

InternalMaintenance

1024

Owa

InternalMaintenance

1024

TeamMailboxSync

CustomerExpectation

1024

Pop

InternalMaintenance

1024

Imap

InternalMaintenance

1024

Momt

InternalMaintenance

1024

Transport

CustomerExpectation

1024

TransportSync

InternalMaintenance

1024

OwaVoice

InternalMaintenance

1024

OrgContactsSyncAssistant

InternalMaintenance

1024

PublicFolderMailboxSync

CustomerExpectation

1024

InferenceDataCollectionAssistant

Discretionary

1

PeopleRelevanceAssistant

InternalMaintenance

1024

SiteMailboxAssistant

InternalMaintenance

1024

PushNotificationService

InternalMaintenance

1024

MailboxReplicationServiceHighPriority

Urgent

1024

StoreUrgentMaintenanceAssistant

Urgent

1024

StoreOnlineIntegrityCheckAssistant

InternalMaintenance

1024

StoreScheduledIntegrityCheckAssistant

Discretionary

1024

MailboxProcessorAssistant

CustomerExpectation

1024

E4eSender

InternalMaintenance

1024

E4eRecipient

InternalMaintenance

1024

MailboxAssociationReplicationAssistant

CustomerExpectation

1024

SharePointSignalStoreAssistant

InternalMaintenance

1024

PeopleCentricTriageAssistant

InternalMaintenance

1024

MailboxReplicationServiceInternalMai...

InternalMaintenance

1024

MailboxReplicationServiceInteractive

CustomerExpectation

1024

ProbeTimeBasedAssistant

CustomerExpectation

1024

DarRuntime

InternalMaintenance

1024

SearchIndexRepairTimebasedAssistant

InternalMaintenance

1024

DarTaskStoreTimeBasedAssistant

InternalMaintenance

1024

OutlookService

InternalMaintenance

1024

GroupMailboxAssistant

InternalMaintenance

1024

StoreDSMaintenanceAssistant

InternalMaintenance

1024

O365SuiteService

CustomerExpectation

1024

Enjoy!

Comments

  • Anonymous
    January 30, 2015
    Thanks for sharing
  • Anonymous
    November 03, 2015
    Great post Ben, I've been looking for something public with all of this explained!