September 2, 2011 by Rakesh Boraiah
Exchange Server relies on global catalog servers in a domain to perform user lookups in Active Directory. Normally, GCs (as they’re commonly abbreviated) are detected automatically by Exchange Server when it first starts up, and then about every 10 hours thereafter.
Exchange Server also attempts to redetect GCs and domain controllers (DCs) if a major topology change is detected — for instance, if all available domain controllers and global catalog servers go offline.
If a GC goes offline, it’s flagged as “down.” Exchange Server will ping it every five minutes to see if it’s back online yet. However, if the detection routine is not working correctly due to changes in the network topology, a GC might be flagged as unreachable when it’s not, or vice versa. This can lead to, among other things, an Exchange-specific issue involving one of its message queues.
Exchange Server has a number of queues that are used for message processing, one of them being the pre-categorization queue. Messages held in it are addressed to recipients that haven’t yet been looked up in Active Directory.
If you have a DC/GC server being queried by Exchange Server that can’t be reached, Exchange will expend one of a limited number of threads available to perform lookups. Under high enough loads, the thread count runs out; processing then stalls until a thread times out of its own accord.
In circumstances like this, you may want (at least provisionally) to turn off Exchange’s automatic topology-discovery functions and hardcode the names of the GCs to be used. This will keep Exchange Server from pinging and searching for GCs.
If you use this technique, just remember that you will have to manually update the hardcoded information to match if an old GC goes offline and a new one is brought in.
But keep in mind that, if your global catalog servers seem overloaded, it might be something as simple as needing another GC to satisfy the demand. Large Exchange Server sites (thousands of users or more) typically impose very heavy demands on global catalogs.
As a side note, an easy way to find out if the pre-categorization queue is getting stuck is to look at the SMTP Server\Categorizer Queue Length performance counter. If the queue is consistently nonzero, even during periods of low email activity, messages are probably getting stuck in the queue, and a GC issue could be the culprit.