天天看點

【Oracle】并行等待之PX Deq: Signal ACK

本系列文章将會介紹在并行操作過程中 slave 程序和 qc 程序經常遇到的等待事件!

waiting process:qc

qc 程序想slaves 程序發送控制資訊并期待slaves 程序的回複 

qc 程序發送一個控制資訊給slaves程序。slave 程序必須發送對控制資訊的響應。在qc等待擷取響應的過程就是“px deq: signal ack”

v$session_wait 中該等待事件對應的參數:

p1 = sleeptime/senderid

p2 = passes

p3 = not used

我們可以使用如下語句擷取轉換sleeptime/senderid的相關資訊:

set serveroutput on

undef p1

declare

    inst varchar(20);

    sender varchar(20);

begin

   select bitand(&&p1, 16711680) - 65535 as sndrinst,

    decode(bitand(&&p1, 65535),65535, 'qc', 'p'||to_char(bitand(&&p1, 65535),'fm000') ) as sndr

    into inst , sender

   from dual

   where bitand(&&p1, 268435456) = 268435456;

    dbms_output.put_line('instance = '||inst);

    dbms_output.put_line('sender = '||sender );

end;

passes 等待的次數!

如果p1的值為空,則意味slave 不需要等待任何程序

比如p1的值為268501004,則上面的sql會傳回:

instance = 1

sender = p012

等待時間:這是一個空閑等待事件,qc正在等待slave 程序的确認資訊。可以忽略此等待事件!