Share via


[전송] 높은 Version Bucket으로 인해 발생하는 Back Pressure를 확인하고 예방할 수 있는 방법

Exchange 2007에서 추가된 Resource Monitoring 기능 입니다.

 

Back Pressure에 대한 자세한 내용은 다음 문서에 설명되어 있습니다.

https://technet.microsoft.com/ko-kr/library/bb201658.aspx

Back Pressure 는 다음과 같이 동작합니다.

- 시스템 리소스 사용률이 지정된 제한을 초과하면 Exchange 서버는 새 연결 및 메시지를 거부

- 시스템 리소스가 과도하게 소모되는 것을 방지하고 Exchange 서버를 통해 기존 메시지를 전달할 수 있게됨

-  시스템 리소스 사용률이 보통 수준으로 돌아가면 Exchange 서버가 새 연결 및 메시지를 수락함

Back Pressure가 모니터링 하는 리소스는 다음과 같습니다.

- 메시지 큐 데이터베이스를 저장하는 하드 디스크 드라이브의 사용 가능한 공간

- 메시지 큐 데이터베이스 트랜잭션 로그를 저장하는 하드 디스크 드라이브의 사용 가능한 공간

- 메모리에 존재하는 커밋되지 않은 메시지 큐 데이터베이스 트랜잭션의 수

- EdgeTransport.exe 프로세스에 사용되는 메모리

- 모든 프로세스에 사용되는 메모리

문제가 많이 발생하는 Version Bucket에 대한 설명입니다.

 

- 메시지 큐 데이터베이스 변경 내용 목록은 트랜잭션 로그로 커밋될 수 있을 때까지 메모리에 보관됨.

- 그런 다음 메시지 큐 데이터베이스로 commit됨.

- 메모리에 보관되어 있는 메시지 큐 데이터베이스 트랜잭션을 버전 버킷이라고 함.

-  바이러스 문제, 메시지 큐 데이터베이스 무결성 문제 또는 하드 디스크 드라이브 성능 때문에 버전 버킷 수가 감당할 수 없이 높은 수준까지 증가할 수 있슴.

Version Bucket Back Pressure 단계에 따른 메일 송수신 변경 내용은 다음과 같습니다.

리소스사용률수준

다른허브전송서버에서의 연결

다른 메시징 서버에서의 연결

사서함 서버에서의 Store Driver 연결

Pickup Directory 및 Replay Directory 전송

내부 메일 흐름

중간

허용

거부

허용

거부

작동

높음

거부

거부

거부

거부

작동하지 않음.

아래는 사용률 수준입니다.

Version Bucket = [Normal=80 Medium=120 High=200]

Queue database and disk space = [Normal=94% Medium=96% High=98%]

Queue database logging disk space = 42% [Normal] [Normal=94% Medium=96% High=98%]

Private bytes = [Normal=71% Medium=73% High=75%]

Physical memory load = 40% [limit is 94% before message dehydration occurs.]

Back Pressure 발생시 아래에서 보는것 처럼 15004 이벤트가 발생합니다.

 

이벤트 형식: 경고

이벤트 원본: MSExchangeTransport

이벤트 범주: ResourceManager

이벤트 ID: 15004

날짜: 2008-09-19

시간: 오후 6:55:43

사용자: N/A

컴퓨터: EXFE01

설명:

리소스 압력이 중간에서 높음(으)로 증가했습니다.

다음 리소스의 리소스 사용률이 정상 수준을 초과했습니다.

버전 버킷 = 266 [높음] [보통=80 중간=120 높음=200]

역 압력으로 인해 다음 구성 요소를 사용할 수 없게 되었습니다.

허브 전송 서버에서 인바운드 메일 전송

인터넷에서 인바운드 메일 전송

Pickup 디렉터리에서 메일 전송

Replay 디렉터리에서 메일 전송

사서함 서버에서 메일 전송

원격 도메인으로 메일 배달

다음 리소스는 정상 상태입니다.

큐 데이터베이스 및 디스크 공간("C:\Program Files\Microsoft\Exchange Server\TransportRoles\data\Queue\mail.que") = 83% [보통] [보통=95% 중간=97% 높음=99%]

큐 데이터베이스 로깅 디스크 공간("C:\Program Files\Microsoft\Exchange Server\TransportRoles\data\Queue\") = 83% [보통] [보통=95% 중간=97% 높음=99%]

전용 바이트 = 12% [보통] [보통=71% 중간=73% 높음=75%]

실제 메모리 로드 = 76% [메시지 하이드레이션을 시작하는 제한 값은 94%입니다.]

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

많이 발생하는 문제인 높은 Version Bucket으로 인한 Back Pressure 문제의 경우, Outlook 2003 SP2 이전 버전을 사용으로 인해

대용량 메시지가 전송되는 경우 발생합니다.

높은 version Bucket은 다음의 성능 카운터를 통해서 확인 할 수 있습니다.

Performance Counter에 MSExchange Database\Version Bucket Allocated

다음과 같은 Management Shell을 통해 대용량 메일을 찾을 수 있습니다.

Get-ExchangeServer | Where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Resultsize unlimited -Start "9/19/2008 4:00:00 PM" -End "9/19/2008 08:00:00 PM" | Select-Object Timestamp,Source,EventId,Sender,recipient,TotalBytes,RecipientCount | Sort-Object TotalBytes -desc > LargeAttach-Trackinglog.txt

Outlook 2007 SP2 이전 버전의 경우, 클라이언트에서 서버상에 설정된 전송가능한 파일 크기를 확인하여 전송을 막는 기능이 없습니다.
(이 기능은 exchange 2003 sp2 + kb894795 와 Outlook 2003 SP2 에 기능이 추가되었습니다. Exchange 2007은 내부적으로 이 코드가 이미 구현되어 있는 상태입니다.)

https://support.microsoft.com/default.aspx?scid=kb;EN-US;894795

Outlook 2003 SP2를 적용하지 않을 경우, 대용량 파일의 첨부가 가능해지고 허브 전송 서버에서 메일 크기를 확인하는 Exchange 2007 에서는 이 메일에 대한 NDR 발송이 완료되기 전까지는 계속 Version Bucket으로 인한 Back Pressure 문제가 발생할 수 밖에 없는 상황입니다.

큰 첨부 파일로 인한 Back-Pressure 문제가 발생하지 않도록 하기위한 최선책은 다음과 같습니다.

1. 모든 클라이언트를 Outlook 2003 SP2 이상으로 업그래이드

2. Outlook 2003 SP2 이전 버전의 클라이언트의 경우 Store 에 연결할 수 없도록 차단.

Outlook 2003 SP2 이전 버전을 차단하는 방법

Get-mailbox | Set-CasMailbox –MAPIBlockOutlookVersion:”-11.6564.6568“

을 설정하면 Outlook 2003 sp2 이전 버전은 차단됩니다.

https://support.microsoft.com/default.aspx?scid=kb;EN-US;924625
차단을 해제하는 방법은..

get-mailbox | Set-CasMailbox -MAPIBlockOutlookVersions:$null

Exchange 2007 SP1을 적용했다면 Transport Service의 Cache 사이즈를 늘려서 성능을 개선할 수 있습니다.

기본적인 Cache 크기는 128MB 입니다.

EdgeTransport.exe.config 파일을 수정해서 512 메가로 증가시킵니다.

<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
<appSettings>
<!-- Optimized Transport DB storage -->
<add key="QueueDatabasePath" value="e:\data\"/>
<add key="QueueDatabaseLoggingPath" value="c:\logfiles\"/>
....
<!-For very large message test: commented default 128M DB Cache -->
<!-- add key="DatabaseMaxCacheSize" value="134217728" / -->
<!-Using 512M DB Cache: -->

< add key="DatabaseMaxCacheSize" value="536870912" /> ...
</appSettings>

정리하면 다음과 같습니다.

1. Outlook 2003 SP2를 적용해서 대용량 메시지로 인한 문제를 방지

2. EdgeTransport.exe 의 database cache 사이즈를 증가시킴.

3. Mail.que 파일과 Transaction Log 파일을 별도의 Disk subsystem에 분리하여 성능을 향상시킴.

4. mail.que database 가 Courrpt 되었는지 확인해야 함.

written by shsong

Comments

  • Anonymous
    January 01, 2003
    The comment has been removed
  • Anonymous
    July 03, 2009
    위의 글을 읽으면서 잘못 표시한 부분이 있어서 말씀드립니다. Outlook 2007 SP2 이전 버전의 경우, 클라이언트에서 서버상에 설정된 전송가능한 파일 크기를 확인하여 전송을 막는 기능이 없습니다. --> Outlook 2003 SP2 이전 버전으로 수정해야 됨. 실제 메모리 로드 = 76% [메시지 하이드레이션을 시작하는 제한 값은 94%입니다.] --> 디하이드레이션 으로 변경해야함. 실제 한글버전에서 이렇게 나온다면 Localization bug 입니다.