Applies to: Exchange Server 2010 SP3, Exchange Server 2010 SP2

Topic Last Modified: 2011-03-19

Exchange Search indexes mailboxes and supported attachments in Exchange mailboxes. With increasing volumes of e-mail, increasing mailbox sizes and storage quotas, provisioning of personal archive mailboxes for users, and the introduction of Multi-Mailbox Search for performing discovery searches, Exchange Search is a critical component of the Mailbox servers in your Microsoft Exchange Server 2010 organization. Issues with Exchange Search can affect user productivity and impact Multi-Mailbox Search functionality.

To learn more about Exchange Search, see Understanding Exchange Search.

Looking for management tasks related to managing Exchange Search? See Managing Exchange Search.

Using the Test-ExchangeSearch Cmdlet

Step 5 of the procedure in this topic describes running the Test-ExchangeSearch cmdlet to help diagnose Exchange Search issues. You can use the Test-ExchangeSearch cmdlet to test Exchange Search functionality for a Mailbox server, a mailbox database, or a specific mailbox. The cmdlet delivers a test message to the specified mailbox (or to a database's system mailbox if a mailbox isn't specified), and then performs a search to determine whether the message is indexed, including the time taken to index it. Under normal conditions, Exchange Search indexes a message within about 10 seconds of the message being created or delivered to a mailbox. The test message is automatically deleted after the test.

Exchange 2010 includes the following enhancements to the Test-ExchangeSearch cmdlet:

  • The Mailbox parameter has been added to the standard output.

  • When you specify a server name, the cmdlet simultaneously tests all mailbox databases on the Mailbox server. For databases that are replicated to other Mailbox servers in a database availability group (DAG), if you run the command on a Mailbox server that doesn't contain the active database copy, the test is automatically performed against the server that contains the active database copy.

  • When you use the cmdlet with the MonitoringContext parameter, it provides additional data that can be used by monitoring software such as Microsoft System Center Operations Manager 2007.

  • When you use the cmdlet with the Verbose switch, the cmdlet returns detailed results and status for every step, and additional diagnostic information to help you troubleshoot issues related to search.

For detailed syntax and parameter information, see Test-ExchangeSearch.

Retrieving Unsearchable Items

You can use the Get-FailedContentIndexDocuments cmdlet to retrieve a list of unsearchable mailbox items that couldn't be successfully indexed by Exchange Search. You can run the cmdlet against a Mailbox server, a mailbox database, or a specific mailbox. The cmdlet returns details about each item that couldn't be searched. There are several reasons why a mailbox item can't be searched; for example, an e-mail message includes an attachment file type for which a search filter isn't installed. If a search filter for that file type is available, you can install it on your Exchange servers.

Search filters provided by Microsoft are tested and supported by Microsoft. We recommend that you test any third-party search filters in a test environment before installing them on Exchange servers in a production environment.
Messages that contain an attachment file format that's listed on the safe list aren't returned in the list of unsearchable items. For more details, see "Exchange Search and Attachments" in Understanding Exchange Search.

For detailed syntax and parameter information, see Get-FailedContentIndexDocuments.

Diagnose Exchange Search Issues

You need to be assigned permissions before you can perform this procedure. To see what permissions you need, see the "Exchange Search" entry in the Mailbox Permissions topic.

  1. Check service state   Is the Microsoft Exchange Search Indexer (MSExchangeSearch) service started on the Mailbox server? If yes, go to Step 2. If no, use the Services MMC snap-in to verify that the MSExchangeSearch service is running as follows:

    1. Click Start, point to Administrative Tools, and then click Services.

    2. In Services, verify that the Status for the Microsoft Exchange Search Indexer service is listed as Started.

  2. Check mailbox database configuration   Is the IndexEnabled parameter set to true for the user's mailbox database? If yes, go to Step 3. If no, run the following command in the Shell to verify that the IndexEnabled flag is set to true.

    Copy Code
    Get-MailboxDatabase | Format-Table Name,IndexEnabled
    For detailed syntax and parameter information, see Get-MailboxDatabase.

  3. Check mailbox database crawl state   Has the Exchange database been crawled? If yes, go to Step 4. If no, use Reliability and Performance Monitor to check the Full Crawl Mode Status counter of the MSExchange Search Indices performance object. Perform the following steps:

    1. Open Reliability and Performance Monitor (perfmon.exe).

    2. In the console tree, under Monitoring Tools, click Performance Monitor.

    3. In the Performance Monitor pane, click Add (green plus sign).

    4. In Add Counters, in the Select counters from computer list, select the server on which the mailbox database you want to monitor is located.

    5. In the unlabeled box below the Select counters from computer list, select the MSExchange Search Indices performance object.

    6. In the Instances of selected object box, select the instance for the user's mailbox database.

    7. Click Add, and then click OK.

    In the Performance Monitor pane, the MSExchange Search Indices performance object is listed in the Object column, and its various counters are listed in the Counter column. View the Full Crawl Mode Status counter. When the database is still being crawled, it has a value of 1. When the crawl is complete, the value is 0.

    To view other relevant search counters, use the preceding Steps a though g to add the following performance objects:

    • MSExchange Search Indexer

    • MSFTESQL-Exchange:Catalogs

    • MSFTESQL-Exchange:FD

    • MSFTESQL-Exchange:Indexer

    • MSFTESQL-Exchange:Service

    For information about using Performance Monitor, see Performance and Reliability Monitoring Step-by-Step Guide for Windows Server 2008

  4. Check the database copy indexing health   Is the content index healthy? Use the Get-MailboxDatabaseCopyStatus cmdlet to check the content indexing health for a database copy.

    Copy Code
    Get-MailboxDatabaseCopyStatus | Format-Table Identity,ActiveDatabaseCopy,ContentIndexState -Auto
    For detailed syntax and parameter information, see Get-MailboxDatabaseCopyStatus.

  5. Run the Test-ExchangeSearch cmdlet   If the mailbox database has already been crawled, you can run the Test-ExchangeSearch cmdlet for the mailbox database or for a specific mailbox.

    Copy Code
    Test-ExchangeSearch -Identity
    For detailed syntax and parameter information, see Test-ExchangeSearch.

  6. Check the Application event log   Using Event Viewer or the Shell, check the Application event log for search-related error messages. Check the Source: MSExchangeSearch Indexer and msftesql-Exchange events. For more information, follow the link in the event log entry.

  7. Restart the Microsoft Exchange Search Indexer service   Use the Services MMC snap-in or the Shell to stop and then restart the Microsoft Exchange Search Indexer (MSExchangeSearch) service:

    1. Click Start, point to Administrative Tools, and then click Services.

    2. In Services, right-click Microsoft Exchange Search Indexer, and then click Stop. After the service is stopped, right-click the service again, and then click Start.

  8. Reseed the search catalog   In some cases, such as when the search catalog is corrupted, you may need to reseed the catalog. When a search catalog needs to be reseeded, Exchange Search notifies you by logging entries in the Application event log. For more information about reseeding the Search catalog, see Reseed the Search Catalog.