In today's installment of "Microsoft Exchange Server 2007 Service Pack 2 Preview", I bring you a brief overview of how we are making monitoring named property id usage easier (in the aforementioned service pack 2 - yes, for Exchange Server 2007).
As previously covered here, Exchange Server has the ability to convert x-headers into MAPI NamedProperties. These named properties contain the values of the Xheader for consumption by native MAPI clients who do NOT want to parse the transport headers themselves.
As also covered before, there's a limit on how many of these there can ever be on a single database - 32k. There is also (as mentioned before) no way to recover a named property id once it is distributed.
Rounding out our named property recount, the Information Store (STORE) applies a named property quota which limits how many properties can be handed out. When the quota is exceeded delivering a message with x-headers which can't be created results in those x-headers not being promoted to individual properties. Delivering a message that has a named property which is NOT an x-header and cannot be mapped results in an NDR.
Questions and Answers
There are three basic questions that most admins ask after encountering a named property quota error:
1. How close am I to doom?
2. How fast are my named property ids being consumed (and by who?)
3. If I'm already hosed, what consumed the ids?
The answer is in Service Pack 2 - a new cmdlet, Get-NamedProperty. One cmdlet with three distinct uses, to answer the primary questions for named property promotion.
Get-NamedProperty by default requires a mailbox identity parameter. That's an SMTP address, a guid, a XDSDN (legacyDN) or a LDAP DN for the mailbox object. It runs in one of three mapping modes:
Last: Find the highest named property identifier in use. This is the one I use for monitoring named property growth (we see people use this in scripts to monitor MDBs and adjust the named property quotas appropriately). In this mode you get back the last named property mapped.
New: Find named properties registered since a given id. This one isn't terribly useful unless you already ran get-namedproperty in last mode (the default mode) once. You use it to monitor how fast named property ids are being consumed and where they are coming from. In conjuction with the -StartingPropId parameter, this retrieves only properties mapped since the -StartingPropId.
All: Retrieve all named property mappings. If you are stuck doing analysis of a database which has consumed all named property ids, the number one question is "Why did this happen?" All mode gives you the data you need to answer this. All also requires -Force if you don't want the cmdlet to ask if you really want to retrieve everything.
How to use this
First off, this only exists in Service Pack 2. If you are not running service pack 2 (and you probably aren't, given that it hasn't released yet), wait patiently until it does arrive. Get-NamedProperty is a support namespace cmdlet, meaning that by default you don't see it in the command list. In order to use it, you open an exchange powershell prompt and type:
> Add-PSSnapin Microsoft.Exchange.Management.Powershell.Support
(I modify my Exchange.ps1 in $exbin to do this automatically).
Now Get-NamedProperty will be available and ready to assist in your diagnosis and monitoring.
Let's look at some of the ways we can use it:
PS] C:\SP2Auditing\Perfdata>Get-NamedProperty Administrator | fl
Kind : String
Guid : 33eba41f-7aa8-422e-be7b-79e1a98e54b3
Propset : 33eba41f-7aa8-422e-be7b-79e1a98e54b3
Name : ConversationIndexTrackingEx
PropertyId : A02E
The last id in use is A02E. Since named property IDs begin at 0x8000, there are 202E properties in use - 8238. Now, we know (from this kb: http://technet.microsoft.com/en-us/library/bb851492.aspx, found by using "Named Property Quota" in a search engine) that by default the named property quota for internet headers is 8192 (0x2000). This MDB will certainly be logging named property quota errors. Now we also know (from the same kb) that the limit for Non MAPI named properties by default is 16384 (0x4000). So while MAPI clients can still map property ids, x-headers are not being promoted to separate named properties.
Get-NamedProperty - coming soon to a support namespace near you. Not changing the world, just making Exchange administration a little easier.