2017-11-18 13 views
0

는 문서DBMS_ALERT 폴링 간격

WAITANY 과정에서, 제발, 여기에이 단락을 설명한다. WAITANY 절차를 사용하고 신호 세션이 신호를 보내지 만 신호의 1 초 내에 커밋하지 않으면 폴링 루프가 필요하므로이 커밋되지 않은 경고가 다른 경고를 위장하지 않습니다. 폴링 루프는 1 초 간격으로 시작하여 30 초 간격으로 지수 적으로 역행합니다.

정확히 여기서 WAITANY가 서버에서 호출 될 때 스레드가 일정 간격으로 이벤트가 있는지를 쿼리한다고합니다. 그리고 WAITANY에 충분히 긴 시간 제한으로 전화를 걸면 이벤트가 발생하면 현재 요청 간격이 만료 된 후에 만 ​​알림을 받게됩니까? 그. 이 코드와 비슷합니다.

function WaitAny(ATimeout) { 
    const intervals = [0, 1, ....., 30); 
    for (i = 0; i < intervals.length; i++) { 
    Sleep(min(intervals[i], ATimeout)) 
    if (IsExistsEvents()) 
     return 0; 
    ATimeout -= intervals[i]; 
    if (ATimeout <= 0) 
     return 1; 
    } 
    maxInterval = intervals[intervals.length - 1]; 
    while (ATimeout > 0) { 
    Sleep(min(maxInterval, ATimeout)) 
    if (IsExistsEvents()) 
     return 0; 
    ATimeout -= maxInterval; 
    } 
    return 1; 
} 

답변

1

아니요, 여전히 "즉시"입니다.

경고 신호를 보내는 사람이 있으면 웨이터에게 표시되는 파이프 메시지 (비 트랜잭션 스킵)가 튀어 나오게됩니다. 물론 웨이터는 서명자가 위탁 할 때까지 "공식적으로"경고를받지 못했습니다.

따라서 웨이터가 깜박임을 얻은 다음 잠금 장치를 기다립니다 (경고는 Oracle의 표준 잠금 장치로 구현됩니다). 왜냐하면 우리는 그 약속이 빨리 올 것이라고 기대하기 때문입니다.

경고 (여기서 우리는 WAITANY를하고 있기 때문에)로부터 신호를받는다면 문제가 될 수 있습니다. 그래서 그 커밋이 오지 않을 때, 우리는 기꺼이 동의하고 지수 적 백 오프를 할 것입니다. 그러나 "1, 2, 4, 초 초에 경고를 확인"하는 것이 아니라 "1,2,4, ... 초마다 잠금 상태를 다시 입력하십시오"입니다. 그래서 그 커밋이 올 때, 우리는 그것을 곧바로 볼 것입니다.

예를 들어, 나는 신호하지만 당신은 2 분 대기가 잠금 대기에 거의 모든했다 볼 수 있습니다

declare 
    n varchar2(100); 
    m varchar2(100); 
    s int; 
begin 
    dbms_alert.WAITANY(n,m,s); 
end; 

call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.00  0.00   0   0   0   0 
Execute  1  0.00  127.49   0   0   0   1 
Fetch  0  0.00  0.00   0   0   0   0 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  2  0.00  127.50   0   0   0   1 

Misses in library cache during parse: 1 
Optimizer mode: ALL_ROWS 
Parsing user id: 107 

Elapsed times include waiting on following events: 
    Event waited on        Times Max. Wait Total Waited 
    ---------------------------------------- Waited ---------- ------------ 
    enq: UL - contention       9  32.01  127.47 
    log file sync         1  0.00   0.00 
    SQL*Net message to client      1  0.00   0.00 
    SQL*Net message from client      1  0.00   0.00 
******************************************************************************** 

를 저 지르지 않은 사람으로부터 경고에 2 분 대기를 추적.