在 Oracle 数据库中,等待事件 enq: KO - fast object checkpoint 并不常见,在以下来自 11.2.0.4 RAC 集群环境的 AWR 报告中,可以看到 enq: KO - fast object checkpoint 已经名列前茅,成为一个值得注意的事件。
Top 10 Foreground Events by Total Wait Time| Event | Waits | Total Wait Time (sec) | Wait Avg(ms) | % DB time | Wait Class |
|---|---|---|---|---|---|
| reliable message | 6,993,900 | 2348.3K | 391 | 36.7 | Other |
| direct path read | 6,902,813 | 1891.2K | 327 | 23.3 | User I/O |
| enq: KO - fast object checkpoint | 11,099,950 | 1839.5K | 172 | 26.8 | Application |
| db file sequential read | 917,141 | 186.8K | 206 | 2.9 | User I/O |
| DB CPU | 49.7K | .8 | |||
| read by other session | 29,508 | 6851.7 | 240 | .1 | User I/O |
| control file sequential read | 89,411 | 6153.4 | 77 | .1 | System I/O |
| db file parallel read | 30,457 | 4902.7 | 166 | .1 | User I/O |
| gc buffer busy acquire | 28,939 | 4275.3 | 174 | .1 | Cluster |
| gc current block busy | 9,824 | 3125.4 | 328 | .0 | Cluster |
通过 v$Lock_type 视图,我们可以获得这个等待事件的释义:
SQL> select type,description from v$lock_type where type='KO';
TYPE DESCRIPTION
---------- ----------------------------------------------------------------------
KO Coordinates checkpointing of multiple objects
KO 是 Coordinates 的缩写,等待事件的含义是:协调多个对象的检查点执行。这个等待意味着进程向CKPT进程发出了对象检查点的指令,转而处于等待,等候检查点的完成。
那么为什么出现这个等待事件呢?
这是因为当执行 Direct Path Read 时,会出发对象检查点,促使写出内存中的脏数据,以使得直接路径读可以读取满足一致性要求的数据。
所以在这个案例中,由于11g的 Searial Table Scan 新特性,使得全表扫描通过 Direct Path Read 的方式执行,进行触发了对象检查点,enq KO 等待就出现了。
解决这个问题,首先需要确认,全表扫描是否是正常的,如果频繁的全表扫描,可以关闭串行表扫描的特性,通过Buffer Cache读来规避这个问题。
在这个案例中,是因为执行计划改变,导致的问题。解决了SQL问题,系统性能状况立刻获得好转。
最后修改时间:2020-08-14 18:13:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




