首页 » ORACLE [C]系列, ORACLE 9i-23c » Oracle 19c RAC wait event “enq: KI – contention” using Global temporary tables

Oracle 19c RAC wait event “enq: KI – contention” using Global temporary tables

如果正在使用oracle 19c rac 安装了19.10,19.11 RU后,关注一下使用了global temporary table(GTT)的运行时间,根据MOS Global temporary table (GTT) usage increased elapsed time after Jan RU 2021 (Doc ID 2798017.1) 记录响应时间会比之前慢9-10倍以上,属于 BUG 33127032,等待事件主要是“end: KI – contention”一个跨实例调用的序列化操作并不常见,通常P2值为59表示全局对象失效。

诊断方法通常是根据WAIT EVENT去MOS里search一下,不过有时并不是总有答案,就像MOS上面提到的ID 只有简单的描述,没有任何关键字。 这时可以dump wait 的call stack, 然后根据call stack 去猜测调用。

alter system set events 'wait_event["enq: KI - contention"] trace("anbob_debug %s\n", shortstack())'; 
-- run sql
alter system set events 'wait_event["enq: KI - contention"] off';

-- cd trace path  then grep "anbob_debug" *.trc

猜测与GTT有关, 对于“ON COMMIT DELETE ROWS” GTT的清理和持久表一样需要跨实例锁定,并刷新脏块, Jonathan Lewis 解释是说ORACLE 的开发人员使用GTT复用了持久表的一些代码原因。后来有很快有人表示也遇到过相同案例,安装了patch后消失。

这是一个国外描述的问题,感叹oracle提供了独特诊断功能和OWI能力,及广大爱好者多年知识的积累与分享,还有活跃的twitter技术圈社区讨论,可以在24小时内MOS上没有太多关连时把问题解决, 这是国内目前数据库和生态所不具备的,国产路任重而道远。

打赏

,

对不起,这篇文章暂时关闭评论。