oracle对特定表执行truncate之前,应对位于高速缓冲区上的表数据的脏缓冲区执行检查点工作。因为即时在执行truncate过程中发生故障,也需要能恢复数据。执行truncate的服务器进程,需要等待truncate工作结束,通常是通过enq: CI - contention等待现在观察的。
SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name like 'enq: CI - contention';
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------------ -------------------- -------------------- --------------------
enq: CI - contention name|mode opcode type
enq: CI - contention不是争用引发的,因此大部分情况下不与性能问题有直接联系。但是在检查点相关的部分工作(drop、truncate等)中检查点本身的性能发生问题时,偶尔发生enq: CI - contention等待引起的性能下降现象。特别是多个会话同时执行truncate时,因过多的检查点可能发生系统性能将急剧下降现象。