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