2010-11-27 3 views
2

Oracle AQ에 새로운 것이지만, 실제로 작업하고있는 프로젝트에서 쉽게 작업을 수행해야하는 것처럼 보입니다.다중 소비자 대기열에서 Oracle AQ가 느린 이유는 무엇입니까?

여러 개의 영구 가입자가있는 대기열을 만들고 싶지만 두 명의 가입자가 청취하면 모든 것이 느려지는 것으로 나타났습니다.

한 명의 청취자가 듣게되면 모든 것이 빠릅니다. 큐에 새 메시지를 만들고 거의 즉시 리스너가 소비합니다.

그런 다음 다른 서버의 다른 수신기를 추가합니다. 즉시 오라클은 속도가 느려집니다. 대기열에 메시지를 작성하는 데 60 초 이상 걸립니다. 메시지는 몇 분 후까지 사용되지 않습니다.

큐가 다중 소비자 일 때 더 많은 오버 헤드가 있습니까? 서버가 시작될 때만 오버 헤드가 발생합니까? 아니면 항상 거기에있을 것인가?

단일 소비자 대기열을 사용하여 두 번째 테스트를 실행했지만 이러한 문제가 없었습니다.

아마 내가 청취자 구성에서 잘못된 점을 보았습니까?

내가 내 큐 테이블 설정 방법은 다음과 같습니다

EXEC dbms_aqadm.create_queue_table(queue_table=>'MY_QUEUE_TABLE', 
    queue_payload_type=>'sys.aq$_jms_text_message', 
    multiple_consumers=>TRUE); 

을 그리고 이것은 내 구성입니다 :

<jms:listener-container 
     connection-factory="AQjmsFactory" 
     container-type="default" 
     destination-type="durableTopic" 
     client-id="MY-ADAPTER" 
     acknowledge="transacted"> 
    <jms:listener destination="MYA_INFO_QUEUE" ref="personUpdateListener" subscription="MYADAPTERJ"/> 
    <jms:listener destination="MYB_INFO_QUEUE" ref="courseUpdateListener" subscription="MYADAPTERJ"/> 
</jms:listener-container> 
+0

어떤 데이터베이스 버전/패치 세트입니까? aq_tm_processes 시작 매개 변수의 값은 무엇입니까? – REW

+0

Oracle 10g –

+0

사용 AQ_TM_PROCESSES이 (가) 설정되지 않았습니다 –

답변

0

그것은이다 정말 모델이 작동하는 방식으로 "오버 헤드"너무 많은 여러 가입자. 메시징에는 "스핀 업"및 "스핀 다운"일정 시간이 있습니다. 즉, 이러한 지연 중에 데이터베이스가 여전히 유휴 상태입니다. 처리가 시작되기를 기다리는 동안 중요한 CPU/메모리/IO 소비를 볼 수 없습니다.

작동 방식을 이해하면 특정 간격으로 실행되는 AQ 메시지를 처리하는 백그라운드 작업이 있습니다. 작업이 실행 중이 아닐 때는 사이클을 구울 수 없지만 아무 것도 일어나지 않습니다. 엔진이 작동하지 않거나 빨간불에 앉아있을 때 페라리가 느려진다는 것과 같습니다.

성능을으로 테스트하려면 큐에 많은 메시지가 처리 될 때처럼 유휴 시간을 걱정하지 않아도됩니다. 즉, 페라리가 열린 길에있을 때입니다!

+0

나는 비유에 동의하지 않습니다. 페라리를 혼자서 운전할 때 정말 빨라요. 다른 사람이 자동차에 타면 곧 모든 것이 느려집니다 (i-don't-know-how-long) –