Topic Last Modified: 2009-01-21

The Microsoft Exchange Server Best Practices Analyzer examines the processes that are running on Exchange 2007 Transport servers. This includes servers that are running the Hub Transport role and servers that are running the Edge Transport role.

The Exchange Server Best Practices Analyzer determines the number of worker threads that the store driver uses for mailbox delivery (MaxConcurrentMailboxDeliveries) and the number of threads that the categorizer component uses.

If the sum of store driver threads and categorizer threads exceeds 80 percent of the Microsoft .NET Framework common language runtime (CLR) thread pool limit, the Analyzer generates a warning message.

We recommend an upper limit of 80 percent of the CLR thread pool for mailbox and categorizer thread usage. If the server exceeds this limit, you may experience decreased performance on the server. Specifically, if the MaxConcurrentMailboxDeliveries parameter is set to a high value, such as 100 or greater, the transport server may experience a shortage of categorizer threads. In this scenario, you may experience message delivery issues in the Exchange environment.

The categorizer is an Exchange transport component that processes incoming messages. The categorizer determines how to deliver the messages based on information about the intended recipients. After the categorizer retrieves recipient information, it applies policies, routes the messages, and performs content conversion based on the recipient information.

An Exchange 2007 Edge Transport server uses the categorizer to route messages to the appropriate destination. An Exchange 2007 Hub Transport server uses the categorizer to expand distribution lists and identify alternative recipients or forwarding addresses.

The store driver on the Hub Transport server delivers messages to and from Mailbox servers. The MaxConcurrentMailboxDeliveries parameter specifies the maximum number of delivery threads that the particular Hub Transport server can have open at the same time for message delivery. The default value for the MaxConcurrentMailboxDeliveries parameter is 30. Generally, the store driver holds threads for longer periods during the message delivery process. Therefore, if the MaxConcurrentMailboxDeliveries parameter is set to a high value, thread pool threads may be unavailable to service other requests.

To address this issue, use the Set-TransportServer cmdlet to configure a lower value for the MaxConcurrentMailboxDeliveries parameter. This value should be such that the sum of store driver threads and categorizer threads does not exceed the recommended maximum of 80 percent of the CLR thread pool.

Note:
To determine the size of the available CLR thread pool, multiply the number of logical processors on the server by 25.
To configure the MaxConcurrentMailboxDeliveries parameter
  1. On the Hub Transport server, start the Exchange Management Shell.

  2. To retrieve the current MaxConcurrentMailboxDeliveries value, run the following command. Replace <servername> with the name of the Exchange server.

    Copy Code
    Get-TransportServer <servername> | format-list
    
  3. To set a new MaxConcurrentMailboxDeliveries value, run the following command. Replace <servername> with the name of the Exchange server, and replace <value> with an integer, such as 30.

    Copy Code
    Set-TransportServer <servername> -MaxConcurrentMailboxDeliveries <value>
    
  4. Exit the Exchange Management Shell.

For More Information

For more information about Set-TransportServer cmdlet parameters, see Managing Message Throttling.

For more information about how to use the Set-TransportServer cmdlet, see Set- TransportServer.