Applies to: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1
Topic Last Modified: 2010-01-08

When monitoring servers running Microsoft Exchange Server 2007 with the Hub Transport server role installed, you should know which performance aspects are most important. Hub Transport server operations are primarily CPU and storage (disk) intensive. The CPU is used by the Hub Transport server, edgetransport.exe process, and the antivirus processes. The Hub Transport server needs CPU cycles to process messages and perform operations such as content conversion and message bifurcation. Antivirus processes that scan each message can, at times, consume more CPU and memory than any other process. The performance of disk resources is also important as the Hub Transport server role processes copy mail out from memory into the queue database.

In addition, if there are cluster continuous replication (CCR)-enabled storage groups in the same Active Directory site as the Hub Transport server, they will cause the transport dumpster to be used. Having the transport dumpster enabled on a Hub Transport server causes disk utilization to be increased approximately from 400 to 500 percent.

Transport Disk Counters

The following table lists counters that can be used to identify disk performance bottlenecks. The table also lists the disk latencies that are allowed before performance bottlenecks may start occurring.

Counter Expected values

Logical/Physical Disk(*)\Avg. Disk sec/Read

Shows the average time, in seconds, of a read of data from the disk.

Should be less than 20 milliseconds (ms) on average.

Spikes (maximum values) should not be higher than 50 ms.

Logical/Physical Disk(*)\Avg. Disk sec/Write

Shows the average time, in seconds, of a write of data to the disk.

Should be less than 20 ms on average.

Spikes (maximum values) should not be higher than 50 ms.

Transport Queue Length Counters

The following table lists counters that can be used to determine if there is a queuing problem occurring (local or remote).

Counter Expected values

\MSExchangeTransport Queues(_total)\Aggregate Delivery Queue Length (All Queues)

Shows the number of messages queued for delivery in all queues.

Should be less than 3,000 and not more than 5,000.

\MSExchangeTransport Queues(_total)\Active Remote Delivery Queue Length

Shows the number of messages in the active remote delivery queues.

Should be less than 250 at all times.

\MSExchangeTransport Queues(_total)\Active Mailbox Delivery Queue Length

Shows the number of messages in the active mailbox queues.

Should be less than 250 at all times.

\MSExchangeTransport Queues(_total)\Submission Queue Length

Shows the number of messages in the submission queue.

Should not exceed 100.

If sustained high values are occurring, investigate Active Directory and Mailbox servers for bottlenecks or performance-related issues.

\MSExchangeTransport Queues(_total)\Active Non-Smtp Delivery Queue Length

Shows the number of messages in the Drop directory that is used by a Foreign connector.

Should be less than 250 at all times.

\MSExchangeTransport Queues(_total)\Retry Mailbox Delivery Queue Length

Shows the number of messages in a retry state attempting to deliver a message to a remote mailbox.

Should be less than 100 at all times.

\MSExchangeTransport Queues(_total)\Retry Non-Smtp Delivery Queue Length

Shows the number of messages in a retry state in the non-Simple Mail Transfer Protocol (SMTP) gateway delivery queues.

Should not exceed 100.

\MSExchangeTransport Queues(_total)\Retry Remote Delivery Queue Length

Shows the number of messages in a retry state in the remote delivery queues.

Should not exceed 100.

We recommend that you check the next hop to determine the causes for queuing.

\MSExchangeTransport Queues(_total)\Unreachable Queue Length

Shows the number of messages in the Unreachable queue.

Should not exceed 100.

\MSExchangeTransport Queues(_total)\Largest Delivery Queue Length

Shows the number of messages in the largest delivery queues.

Should be less than 200 for the Edge Transport and Hub Transport server roles.

\MSExchangeTransport Queues(_total)\Poison Queue Length

Shows the number of messages in the poison message queue.

Should be 0 at all times.

Note:
When determining thresholds for queue lengths, you should consider server throughput as well as acceptable delivery delays before you need to be informed. The recommended maximum of 5,000 for the \MSExchangeTransport Queues(_total)\Aggregate Delivery Queue Length (All Queues) counter is for typical medium-size servers and typical maximum delays. You can consider customizing both the aggregate and other limits to optimize performance for your environment.

For example, if the server normally processes 25 messages per second and you want the average message delay to be no more than 5 minutes before you are alerted, you would set the threshold to be 25 messages/second x 5 minutes x 60 seconds/minute = 7,500 messages. However, if your server only processes an average of 5 messages/second, you would set the alert to be only 1,500 messages.

Keep in mind that this calculation does not mean that messages will always be delivered in under 5 minutes. Instead, the average delivery time for one particular server should be under 5 minutes. (Consider how many hops your messages may need to determine actual delivery time.) Also, consider the server hardware in your calculations because having large message queues can be a drain on server resources.

Load Determining Counters

The following counters allow you to accurately gauge a variety of message statistics, all of which are useful in assessing the efficiency and efficacy of the current design. They also provide insight into the interaction between different transport components, including the information store interface.

Counter Expected values

\MSExchangeTransport Queues(_total)\Messages Submitted Per Second

Shows the number of messages that have been queued in the Submission queue per second.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchangeTransport Queues(_total)\Messages Completed Delivery Per Second

Shows the number of messages that are delivered per second.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchange Store Driver(_total)\Inbound: LocalDeliveryCallsPerSecond

Shows the number of local delivery attempts per second.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchange Store Driver(_total)\Outbound: Submitted Mail Items Per Second

Shows the number of mail items per second being submitted.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchangeTransport SmtpReceive(_total)\Average bytes/message

Shows the average number of message bytes per inbound message received.

Determines sizes of messages being received for an SMTP receive connector.

Not Applicable

\MSExchangeTransport SmtpReceive(_total)\Messages Received/sec

Shows the number of messages received by the SMTP server each second.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchangeTransport SmtpSend(_total)\Messages Sent/sec

Shows the number of messages sent by the SMTP send connector each second.

Determines current load. Compare values to historical baselines.

Not Applicable

\MSExchange Store Driver(_total)\ Inbound: MessageDeliveryAttemptsPerSecond

Shows the number of attempts for delivering transport mail items per second.

Determines current load. Compare values to historical baselines.

Not Applicable

MSExchange Store Driver(_total)\Inbound: Recipients Delivered Per Second

Shows the number of inbound recipients delivered per second.

Determines current load. Compare values to historical baselines.

Not Applicable

MSExchangeTransport Queues(_total)\Messages Queued for Delivery Per Second

Shows the number of messages that have been queued for delivery per second.

Determines current load. Compare values to historical baselines.

Not Applicable

MSExchangeTransport Queues(_total)\Messages Completed Delivery Per Second

Shows the number of messages that are delivered per second.

Determines current load. Compare values to historical baselines.

Not Applicable

Transport Dumpster Counters

The transport dumpster provides resilience in the event of server failure, and the counters in this section provide important insight into the transport dumpster current size and usage profile. The transport dumpster also adds additional disk input/output (I/O) to the Hub Transport servers and needs to be considered when troubleshooting performance-related issues on Hub Transport servers. For more information about Exchange disk I/O, see What Causes Exchange Disk I/O.

The following table lists counters that can be used to determine if there are transport dumpster problems occurring.

Counter Expected values

\MSExchangeTransport Dumpster\Dumpster Size

Shows the total size (in bytes) of mail items that are currently in the transport dumpster on this server.

Shows overall size of the transport dumpster.

Not Applicable

\MSExchangeTransport Dumpster\Dumpster Inserts/sec

Shows the rate at which items are inserted into the transport dumpster on this server.

Determines the current rate of transport dumpster inserts.

Not Applicable

\MSExchangeTransport Dumpster\Dumpster Item Count

Shows the total number of mail items that are currently in the transport dumpster on this server.

Shows the current amount of items that are being held in the transport dumpster.

Not Applicable

\MSExchangeTransport Dumpster\Dumpster Deletes/sec

Shows the rate at which items are deleted from the transport dumpster on this server.

Determines the current rate of transport dumpster deletions.

Not Applicable

Transport Database Counters

The following counters were introduced in Exchange Server 2007 Service Pack 1 (SP1). These counters expose important information about the Hub Transport mail database.

Counter Expected values

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\I/O Log Writes/sec

Shows the rate of log file write operations completed.

Determines the current load. Compare values to historical baselines.

Not Applicable

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\I/O Log Reads/sec

Shows the rate of log file read operations completed.

Determines the current load. Compare values to historical baselines.

Not Applicable

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\Log Generation Checkpoint Depth

Represents the amount of work, in count of log files, that need to be redone or undone to the database files if the process fails.

Should be less than 1,000 at all times.

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\Version buckets allocated

Total number of version buckets allocated

Shows the default backpressure values as listed in the edgetransport.exe.config file.

Exchange 2007 release to manufacturing (RTM) version – Medium=60, High =100

Exchange 2007 SP1 version – Medium=120, High=200

For more database cache size guidance, see New maximum database cache size guidance for Exchange 2007 Hub Transport server role.

Should be less than 200 at all times.

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\I/O Database Reads/sec

Shows the rate of database read operations completed.

Determines the current load. Compare values to historical baselines.

Not Applicable

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\I/O Database Writes/sec

Shows the rate of database write operations completed.

Determines the current load. Compare values to historical baselines.

Not Applicable

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\Log Record Stalls/sec

Shows the number of log records that cannot be added to the log buffers per second because they are full. If this counter is non-zero most of the time, the log buffer size may be a bottleneck.

Should be less than 10 per second on average.

Spikes (maximum values) should not be greater than 100 per second.

MSExchange Database ==> Instances(edgetransport/Transport Mail Database)\Log Threads Waiting

Shows the number of threads waiting for their data to be written to the log to complete an update of the database. If this number is too high, the log may be a bottleneck.

Should be less than 10 threads waiting on average.

Extensibility Agent Counters

The following table lists counters that can be used to track the use of transport agents and the amount of time each is taking to process e-mail messages. These could include anti-spam, antivirus, or any transport function that your organization currently utilizes.

Counter Expected values

MSExchange Extensibility Agents(*)\Average Agent Processing Time (sec)

Shows the average agent processing time in seconds per event.

Should be less than 20 at all times.

Sustained higher latencies may indicate a hung agent.

MSExchange Extensibility Agents(*)\Total Agent Invocations

Shows the total number of invocations since the last restart.

Shows the current invocation rate.

Not Applicable