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时,因过多的检查点可能发生系统性能将急剧下降现象。
本文探讨了 Oracle 数据库在执行 truncate 操作时如何处理高速缓存区上的脏缓冲区,以确保数据恢复能力。特别是在并发执行 truncate 时,可能触发 enq:CI-contention 等等待事件,进而导致性能下降。
26

被折叠的 条评论
为什么被折叠?



