Share via


Understanding Exchange 2007 Search & Index #2

지난번 세션에 이어서 Exchange 2007서버에서의 Search 및 Indexing에 대하여 조금 더 알아보도록 하겠습니다.

Process
작업 관리자를 보시면 아래 Process들이 동작되고 있음을 확인하실 수 있습니다.

1. msftesql.exe - Microsoft Search (Exchange) 서비스에 해당하며 이는 Core Indexer 입니다.
2. msftefd.exe - Filter Demon  (첨부파일 Filter와 Word Breaker를 통해서 Store로부터 Contents를 읽음)
3. Microsoft.Exchange.Search.ExSearch.exe ( MSExchange Search Indexer 서비스에 해당)

How to update Index files
Exchange 2007에서 Index 업데이트 방법은 일정시간마다 업데이트된 컨텐츠를 Indexing하는 방식(Crawl)이 아닌 항상 최신업데이트(Always up-to-date)방식으로 이루어집니다.
다시 말하자면 사용자에 의하여 특정 Item이 Database에 추가될 경우 자동으로 이 항목을 Indexing 합니다.
일반적으로 새로운 메시지는 Database에 업데이트된지 10초 이내에 Indexing되어 검색이 가능합니다.

 컨텐츠 인덱스를 새로 빌드해야 하는 경우
1. Online Backup 또는 볼륨쉐도우 백업(VSS)로 부터 Database가 복원될 경우
   Backup API는 Index파일이 저장되어 있는 카탈로그 폴더를 백업하지 않기 때문에 이러한 방식으로 Backup And Restore된 경우 해당 저장소의 Index Rebuild가 필요합니다.

2. Database가 LCR되어 있는 환경에서 Databae파일이 Passive DB Copy파일로 교체될 경우 Index Rebuild 작업이 필요합니다.

3. CCR환경에서 Database가 Passive DB Copy파일로 교체될 경우

4. SCC환경에서 Database 가 Passive Node로 전환될 경우

위의 경우에는 컨텐츠 인덱스 파일이 리빌드 되는작업이 수동 또는 자동으로 이루어져야 합니다.
File Level의 백업 및 복원(EDB파일 복사)의 경우에는 Full Rebuild과정없이 백업한 DB의 카타로그 폴더를 복원하실 수 있습니다.

그 이외에 Outlook의 정크메일필터에 의해 정크폴더로 옮겨진 항목들은 Indexing과정에 포함되지 않습니다.

컨텐츠 인덱스 관리방법

컨텐츠인덱싱(Content Indexing)과정은 기본적으로 생성된 모든 Database에 대하여 Enable되어 있습니다.

이를 확인하기 위해서는 관리쉘에서 아래 명령어로 확인할 수 있습니다.

Get-MailboxDatabase -Server 서버이름 | select Name, IndexEnabled

 

특정 Database에 대하여 컨텐츠 인덱싱을 Disable할 수 있습니다.
Set-MailboxDatabase 'Mailbox Database이름' -IndexEnabled $False

 

서버의 모든 Database에 대하여 Indexing하지 않도록 설정하기 위해서는 아래 쉘명령어를 사용하거나
Get-MailboxDatabase -Server 서버이름 | Set-mailboxDatabase -IndexEnabled $False
또는 Microsoft Exchange Search Index 서비스를 중지시킬 수도 있습니다.

특정 Mailbox의 검색이 정상적으로 동작하는지 확인하는 방법
Test-ExchangeSearch Mailbox
위의 명령어는 Microsoft Exchange 검색만 찾을 수 있는 메시지 및 첨부파일을 생성하고 메시지가 인덱싱되기를 기다린 다음 컨텐츠 검색을 테스트합니다.
해당 컨텐츠 메시지가 검색되면 성공했음을 보고합니다.

Script를 통한 검색 관리
\Exchange Server\Script 디렉토리에는 Exchange 서버의 검색관리에 도움이 되는 몇개의 스크립트가 존재합니다.

사서함 데이터베이스 이름 찾기
GetDatabaseForSearchIndex.ps1 IndexDirectoryName1 IndexDirectoryName2

사서함 데이버베이스 이름에 대한 인덱스 폴더 찾기
GetSearchIndexforDatabase.ps1 MailboxDatbaseName1 MailboxDatabaseName2 -all

사서함 데이터베이스와 연결된 인덱스 폴더 제거
ResetSearchIndex MailboxDatabase1 Mailboxdatabase2 [-All]

Content Index파일을 제거하고 새로 생성하는 방법은 위처럼 ResetSearchIndex.ps1 스크립트를 통해서 가능하지만 MSExchange Search Indexer와 MS Search (Exchange)서비스를 중지시킨뒤에
각 Database 가 존재하는 디렉토리에서 카탈로그 디렉토리를 제거하신뒤에 위의 두 서비스를 다시 시작하셔서 Rebuild 작업을 하실 수도 있습니다.

 

현재 Exchage 2007의 Search 관련하여 알려진 이슈

(제목)
MSftefd.exe 필터데몬 프로세스의 메모리가 지속적으로 증가하면서 Crash되는 이슈가 있습니다.

(문제발생환경)
Exchange 2007 Server 를 사용중이며 영문 또는 한글 OS의 언어를 한글로 사용하시는 환경

(증상)
msftefd.exe 프로세스가 지속적으로 메모리 사용량이 증가하다가 Crash되며 아래 이벤트 64772와 1000이벤트가 반복하여 나타남

이벤트 형식: 오류

이벤트 원본: MSFTESQL-Exchange

이벤트 범주: MSFTESQL 서비스

이벤트 ID: 64772

날짜: 2008-10-29

시간: 오전 4:01:15

사용자: N/A

컴퓨터: MAILBOX

설명:

필터 데몬 프로세스 MSFTEFD가 예기치 않게 종료되었습니다. 스택 추적:

 

자세한 정보는 https://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.

 

이벤트 형식: 오류

이벤트 원본: .NET Runtime 2.0 Error Reporting

이벤트 범주: 없음

이벤트 ID: 1000

날짜: 2008-10-29

시간: 오전 4:00:46

사용자: N/A

컴퓨터: MAILBOX

설명:

Faulting application msftefd.exe, version 12.0.7218.0, stamp 45d058f1, faulting module msfte.dll, version 12.0.7218.0, stamp 45d05970, debug? 0, fault address 0x000000000021b67b.

 

자세한 정보는 https://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.

(원인)
Indexing에 실패하는 메시지의 유입으로 위의 증상이 나타날 수 있으며 현재 Bug로 등록되어 있습니다.
Korean Word Breaker의 문제로 현재 hotfix 개발단계에 있으나 아직 hotfix가 나오지 않았습니다

 

(해결방법)

Workaround로 Exchange서버에서 유니코드를 지원하지 않는 프로그램용 언어를 영어(미국)으로 변경하고 재부팅하여 해결할 수 있습니다

단, 이때 일부 유니코드 비지원 프로그램 그리고 Shell에서 한글이 ???로 표시되는 문제는 감수하셔야 합니다

 

 

참고

Exchange 2007 도움말 파일

Microsoft Exchange Server 2007 Book (written by Tony Redmond)

Microsoft Exchange Team Blog (https://msexchangeteam.com)

 

written by dyjung