2013-04-22 2 views
0

Microsoft는 documentation에서이 값을 변경하는 것에 대해주의를 기울이지 만 문서 자체는 잘못된 것처럼 보입니다. 기본값은 50ms이며 테스트 결과 실제로 10ms라고 나와 있습니다. 50Mhz까지 안전하게 값을 부칠 수 있다면 우리는 행복 할 것이므로 질문은 - MSMQ가 제공하는 트랜잭션 보장을 풀지 않고 그렇게 할 수 있는가?MSMQ의 LogMgrFlushInterval 값을 변경할 수 있습니까?

추신. "왜 세계에서 우리가이 가치를 망쳐 놓을 까?"에 대한 빠른 배경 - 몇 가지 트랜잭션 MSMQ 대기열 위에 위치하는 응용 프로그램이 있습니다. 응용 프로그램은 큐 중 하나를 주기적으로 폴링하고 메시지를 발견하면 처리를 시작합니다. 응용 프로그램 자체가 잘 작동합니다. 그러나 우리가보고있는 바로는 대기열에서 읽는 즉시 MSMQ는 초당 50 개 이상의 쓰기 속도로 디스크에 쓰기 시작하며 각 읽기가 끝난 후 약 10 초 동안 계속됩니다. 응용 프로그램 (트랜잭션 로그 플러시로 나타납니다). LogMgrFlushInterval 값을 50ms로 늘리면 쓰기 속도가 초당 약 12로 떨어집니다. 우리가 신경 쓰는 이유는 초당 50 회의 쓰기와 실행중인 응용 프로그램 인스턴스의 수를 곱하면 그 부하는 본질적으로 NAS의 CPU를 압도하기 때문입니다. 우리는 다른 옵션을 찾고 있습니다 (실행중인 인스턴스의 수를 줄이고 응용 프로그램 폴링 간격을 10 초 이상으로 늘리면 더 큰 NAS를 얻습니다). 그러나 플러시 간격을 변경하는 것보다 시간과 비용이 많이들 것입니다.

답변

1

복구 목적으로 트랜잭션의 모든 부분을 디스크에 기록해야합니다. 간격이 길어질수록 하드웨어 장애가 발생하면 데이터 손실 기회가 커집니다.
읽기 양이 과도하게 들립니다. 초당 처리중인 메시지의 수는 얼마입니까?

+0

MSMQ가 우리의 통제 범위를 벗어나는 것은 읽기 문제 (우리가 통제)가 아니라 문제입니다. 버퍼 플러시로 인한 쓰기 수는 대기열에 기록 된 메시지 수와 상관 관계가없는 것으로 나타납니다. 대부분의 서버는 초당 10 개 미만의 메시지를 처리하지만 여전히 초당 50+ 개를 처리합니다. 플러시 간격을 늘리는 주제로 돌아 가기 - 데이터를 잃을 확률은 간격 크기에 비례한다고 말하고 있습니까? (즉, 10ms에서 50ms로 이동하면 메시지를 잃을 확률이 5 배나됩니까?) – user8032

관련 문제