2010-02-10 3 views
5

EventLogReader를 사용하여 원격 2008 서버에 이벤트를 쿼리하고 있습니다. 원격 시스템에서 이벤트를 쿼리하는 성능은 끔찍합니다 (6/초). 전달 전용 ManagementObjectSearch를 사용하여 WMI를 통해 동일한 컴퓨터에 쿼리하면 성능이 매우 좋습니다 (1000/초). 속도를 높이기 위해 EventLogReader에 비슷한 옵션 (예 : ReturnImmediatly, Rewindable)이 표시되지 않습니다. 원격 서버의 방화벽을 해제하여 통신 문제가 있는지 확인하려고했으나 차이가 없었습니다.EventLogReader 원격 성능

EventLogReader를 사용하여 로컬 호스트에서 로그를 읽는 경우 예상대로 성능을 발휘합니다. 속도가 느려지는 네트워크에서만 (그러나 WMI에서는 문제가 발생하지 않음).

네트워크를 통해 EventLogReader의 성능을 향상시키는 방법은 무엇입니까?

덕분에, 미치

+0

WMI를 사용할 수없는 특별한 이유가 있습니까? – Oded

+0

이벤트를 오름차순으로 가져와야합니다 (EventLogReader에서 허용). WMI는 내림차순으로 만 다시 제공합니다. –

+0

WMI를 사용하여 메모리에로드 한 다음 정렬하는 방법은 무엇입니까? –

답변

4

은 (http://msdn.microsoft.com/en-us/library/bb671200.aspx에서 샘플 코드를 수정) 약간의 테스트를했고, 나의이 실험에서 나는 성능 저하가() EventRecord.FormatDescription를 호출 오는 것을 발견했다.

EventRecord.ToXml()을 호출했을 때 LAN상의 서버에서 약 170 이벤트/초로 25 초에 4300 개의 이벤트를 원격으로 가져올 수있었습니다. EventRecord.FormatDescription()에 대한 호출을 추가하면 성능이 거의 모든 분당 4300 개 이상의 이벤트와 약 52 이벤트/초를 읽는 데 거의 1.5 분으로 떨어졌습니다.

나는 이것이 당신이 원하는 답변이 아닐 수도 있지만 내 조언은 당신이 EventRecord.FormatDescription()을 호출 할 필요가 없다면 그것은 성능이 상당히 향상 될 것이라는 점에 유의할 것입니다.

+0

@ 네이트 : 그걸 살펴 줘서 고마워. 메시지를 받기 위해 호출해야하는 FormatDescription을 호출합니다. 보간 된 메시지를 가져 오는 또 다른 방법이 있는지 궁금합니다. 나는 그것으로 주위를 어지럽히 야 할 것이다. –

+0

EventRecord.ToXML()은 응용 프로그램 로그 메시지 만 출력하고 보안 로그는 이벤트 로그 속성을 기반으로 작성된 것 같지만 FormatDescription()은 느리게 처리하는 것처럼 보입니다. XPath 데이터가없는 경우 보안 로그 세부 정보에 대한 전체 XPath를 작성하고 FormatDescription에 대해 다시 고려할 것입니다. – StrangeWill

+0

^무시 무시한 생각이었다. 나는 바보처럼 느린 FormatDescription을 기본적으로 보완 할 방법이 없다. – StrangeWill