2013-03-13等待事件PX Deq Credit: send blkd

  今天出现严重的等待事件PX Deq Credit: send blkd,与实施组沟通,系统并没有慢的情况。

Snap Id Snap Time Sessions Cursors/Session
Begin Snap: 21524 13-3月 -13 14:00:24 365 19.5
End Snap: 21528 13-3月 -13 18:00:15 357 20.6
Elapsed: 239.84 (mins)
DB Time: 1,465.76 (mins)

Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
PX Deq Credit: send blkd 26,261 50,747 1,932 57.7 Other
CPU time 32,444 36.9
SQL*Net more data to client 357,623,209 7,296 0 8.3 Network
db file sequential read 362,866 1,119 3 1.3 User I/O
log file sync 56,153 705 13 .8 Commit

 

Event Waits %Time -outs Total Wait Time (s) Avg wait (ms) Waits /txn
PX Deq Credit: send blkd 8,648 89 15,556 1799 0.15

Elapsed Time (s)

CPU Time (s) Executions Elap per Exec (s) % Total DB Time SQL Id SQL Module SQL Text
50,759 2 0 57.72 4hj78qkyk67p0 ORACLE.EXE SELECT "ARCHIVES_ID", "CONTENT...

通过数据字典查到此表是有并行操作的。

SQL>select table_name,degree from user_tables where table_name='ARCHIVES_CONTENT';

TABLE_NAME                           DEGREE
------------------------------          --------------------
ARCHIVES_CONTENT                    4

        一般来说空闲等待可以忽略它,但是实际上空闲等待也是需要关注的,因为一个空闲的等待,它反映的是另外的资源已经超负荷运行了。基于这个原因,在Oracle 10g里已经把PX Deq Credit: send blkd等待时间不在视为空闲等待,而是列入了Others 等待事件范围。
        PX Deq Credit: send blkd 等待事件的意思是:当并行服务进程向并行协调进程QC(也可能是上一层的并行服务进程)发送消息时,同一时间只有一个并行服务进程可以向上层进程发送消息,这时候如果有其他的并行服务进程也要发送消息,就只能等待了。 知道获得一个发送消息的信用信息(Credit),这时候会触发这个等待事件,这个等待事件的超时时间为2秒钟。
       如果我们启动了太多的并行进程,实际上系统资源(CPU)或者QC 无法即时处理并行服务发送的数据,那么等待将不可避免。 对于这种情况,我们就需要降低并行处理的并行度。
       当出现PX Deq Credit:send blkd等待的时间很长时,我们可以通过平均等待时间来判断等待事件是不是下层的并行服务进程空闲造成的。该等待事件的超时时间是2秒,如果平均等待时间也差不多是2秒,就说明是下层的并行进程“无事所做”,处于空闲状态。 如果和2秒的差距很大,就说明不是下层并行服务超时导致的空闲等待,而是并行服务之间的竞争导致的,因为这个平均等待事件非常短,说明并行服务进程在很短时间的等待之后就可以获取资源来处理数据。
      所以对于非下层的并行进程造成的等待,解决的方法就是降低每个并行执行的并行度,比如对象(表,索引)上预设的并行度或者查询Hint 指定的并行度。

你可能感兴趣的:(2013-03-13等待事件PX Deq Credit: send blkd)