본문 바로가기
공부/Microsoft

[Exchange2013] 메모리 사용의 변화(Store.exe)

by xholic 2015. 2. 4.

오랜 만에 포스트 합니다.


새롭게 아직도 알아야될것이 너무 많네요...



그럼 본론으로 들어가서 Exchange Server를 운영하면서 서버의 리소스중 가장 신경 쓰이는 것이 바로 메모리 일 것입니다.


이전 Exchange 버전에서는 80~90%를 사용하여도 정상으로 보았습니다. (제가 가장 봤던 사이트중 가장 높았던 사이트는 97% 였던것 갔네요...)



이 높은 메모리 사용률 중에서 가장 많이 차지고 하고 있는 프로세스는 Store.exe 입니다.


약 12GB 메모르의 절반 정도인 6GB를 Store.exe가 차지하고 있네요.



Store.exe는 Information Store의 프로세서로서 사서함 및 공용폴더 데이터베이스 관리에 관여하는 프로세스입니다.


Exchange 2010에서는 모든 데이터베이스가 Store.exe 하나의 인스턴스에 의하여 호스팅 되었습니다.


이경우 단일 사서함 데이터베이스에 문제가 있다면 다른 모든 사서함 데이터베이스에 영향을 미칠 잠재력을 가지고 있었습니다.




Exchange 2013에서는 기존에 단일 Store.exe를 사용 하는 디자인에서 사서함 데이터베이스 별로 Store.exe 프로세서가 생성 되도록 변경 되었습니다.


Exchange 2013에서는 Microsoft.Exchange.Store.Service.exe와 Microsoft.Exchange.Store.Worker.exe로 나뉘어 졌습니다.


Store.Service.exe는 모든 Store.Worker.exe를 관리하고 종료 할수 있습니다. Store.Worker.exe는 데이터 베이스 별로 생성 되고


해당 데이터 베이스를 관리 합니다.


하지만 이름이 모두 똑같아서 확인 어떤 프로세서가 어떤 데이터베이스와 연결되었는지는 작업 관리자로만 확인 하기 어렵습니다.


이때 확인을 하고 싶다면 아래와 같은 Cmdlet를 사용하여 해당 데이터 베이스에 관련된 프로세스의 ProcessID를 보고 확인 할수 있습니다.


이로써 각 데이터 베이스의 문제가 다른 데이터 베이스에 영향을 미칠 수있는 경우가 줄어 들게 되었습니다.(IIS 풀과 비슷하네요...)






이전 Exchange에서 Store.exe는 데이터 베이스 캐시를 사용하였기 때문에 메모리의 대부분을 차지 하고 있었습니다. 


데이터 베이스 캐시는 디스크에 읽고 쓰는것보다 메모리에 읽고 쓰는것이 더 빠른 것을 이용하여


I/O 작업을 줄여 더 빠르게 작업을 하도록 도와줬습니다.


Exchange 2010에서는 아래와 같이 서버의 실제 물리 메모리와 설치된 역할에 따라


기본 사서함 데이터 베이스 캐시 크기가 결정되었습니다.


실제 메모리(RAM)

캐시 크기: (사서함 역할만)

캐시 크기: 여러 역할(예: 사서함 + 허브 전송)

2GB

512MB

지원되지 않음

4GB

1GB

지원되지 않음

8GB

3.6GB

2GB

16GB

10.4GB

8GB

24GB

17.6GB

14GB

32GB

24.4GB

20GB

48GB

39.2GB

32GB

64GB

53.6GB

44GB

96GB

82.4GB

68GB

128GB

111.2GB

92GB


위 표에서 확인해보면 실제 메모리가 커질 수록 캐시 크기가 커지는것을 확인 할 수 있고


심지어 실제 메모리의 절반 이상을 사용하는것도 확인 할 수 있습니다.


Store.exe에서 위의 메모리를 가지고 있다가 다른 응용 프로그램이 요청을 하게 되면 동적으로 메모리를 반환 해 준다고 하지만


Exchange Management Console를 사용할때에는 메모리를 반환 받지 못하는지 느리더군요...(저만의 생각???)



Exchange 2013에서는 실제 메모리의 25%까지 서버에서 캐시로 사용 하도록 디자인이 변경되었습니다.


또한 정해진 서버 캐시를 각 데이터베이스 마다 나누어서 사용하게 됩니다.


각 데이터베이스 마다 나늬어진 캐시를 활성 복사본은 모두 사용하고 수동 복사본은 20%만 사용합니다.


좀더 자세한 계산은 아래와 같이 MaximumActiveDatabases값(set-mailboxserver 의 매개변수) 의 설정 여부에 따라 달라지게 됩니다.



예제1 - 사서함 서버는 총 48GB의 메모리가 있고 2개의 활성화 복사본과 2개의 수동 복사본이 있습니다.또한 MaximumActiveDatabases의 값은 설정 되어 있지 않습니다.


총 48GB의 실제 메모리가 있다면 서버에서는 캐시로 최고 12GB를 사용 할수 있습니다.

(위의 표와 비교하면 상당히 줄은 것을 확인 할 수 있네요...)


48GB X 25% = 12GB



이렇게 서버 캐시 크기가 정해진다음 데이터베이스별로 캐시가 정해지게 됩니다.

활성 복사본과 수동 복사본의 총합으로 나눠가지게 됩니다.

활성 복사본 2개 수동 복사본이 2개라면 각 복사본이 가질수 있는 캐시 크기는 3GB입니다.


12GB / 4 데이터 베이스 = 3GB



이제 활성 복사본은 해당 캐시를 다 사용하게 되고

수동 복사본은 해당 캐시의 20%만 사용 하고 나머지는 수동 복사본이 활성 복사본으로 변경 될때를 위하여 예약 해두게 됩니다.


활성 복사본 캐시 = 3GB

수동 복사본 캐시 = 3GB X 20% = 0.6GB

복사본 변경 예약 = 2.4GB


그럼 예제 1에서는 활성 복사본이 총 2개로 6GB 수동 복사본이 2개로  1.2GB의 캐시를 사용하고 복사본 변경으로 예약된 4.8GB의 메모리를 사용하여

총 12GB를 사용 하게 됩니다.



예제2 - 사서함 서버는 총 48GB의 메모리가 있고 2개의 활성화 복사본과 2개의 수동 복사본이 있습니다.

또한 MaximumActiveDatabases의 값이 2로 설정 되어 있습니다.


위와 같이 서버에서 총 가질수 있는 캐시는 12GB입니다.


48GB X 25% = 12GB


MaximumActiveDatabases값이 2로 설정 되었기 때문에 수동 복사본은

활성 복사본으로 변경될 이유가 없기 때문에 예약 분을 잡지 않습니다.


12 GB / (2활성 + (2수동 X 20%) = 5GB


활성 복사본 캐시 = 5GB

수동 복사본 캐시 = 5GB X 20% = 1GB


그럼 예제 2에서는 활성 복사본이 2개이니 총 10GB 수동 복사본 2개로 2GB 총 12GB바이트를 사용 하게됩니다. 



예제2에서 활성 복사본이 1개라면 계산이 더 복잡해지겠지만... 계산은 Exchange 서버에서 알아서 해주니까요... 넘어갑시다요 ㅎㅎ


만일 데이터 베이스 및 복사본이 추가 또는 제거될 경우 캐시 값이 재계산 되려면 MSExchangeIS를 재시작 해줘야지 재 계산 됩니다.


미흡한 설명이였지만 도움이 되셨길 바라면 이만 포스트를 마칩니다.



[참고]

Manage Store


댓글