问题背景:
接用户保障,他们的核心交易库在理财抢购活动期间出现交易耗时飙高的问题,交易耗时从原来的130毫秒飙高到1秒以上,请求分析交易耗时飙高原因。
问题分析:
通过应用的后台日志记录,发现交易耗时飙高的主要在于对交易报文的插入语句sql_id:587523twy3pn2
问题期间的awr报告TOP 等待事件里面buffer busy waits、enq:TX -index contention以及Latch MGA shared context Latch平均等待较高
通过ASH查看语句sql_id:587523twy3pn2的执行情况,可以看到执行会话被SID=8204的会话所堵塞,导致出现了大量的buffer busy wait等待,大量出现耗时900毫秒+
堵塞持有会话8204的执行情况,会话当前等待事件为Latch MGA shared context Latch
分析到这里,我们可以确认交易耗时飙高是由于latch: MGA shared context latch高等待引发堵塞,导致执行会话出现了大量的buffer busy wait 等待引发语句执行性能下降
Latch MGA shared context Latch等待主要发生在MGA共享内存区域的并发申请latch等待,MGA是Oracle12.1版本之后新引入的共享内存区域,主要用于存放进程之间的共享地址空间,由segment和heap(KGH)的组成,MGA内存按需弹性创建,进程可以动态的创建和删除MGA segment,同时又可以在部分和全部进程间共享,使用latch: MGA锁来控制访问和保护
当前数据库的版本为19.12,操作系统为AIX,在Oracle的mos上查到了与当前平台版本匹配的Bug 引发Latch MGA shared context Latch高等待的文档
(Bug 33352794 HIGH WAIT ON 'LATCH: MGA SHARED CONTEXT ROOT LATCH' AND 'LATCH: MGA SHARED CONTEXT LATCH')
Oracle 19.12在AIX操作系统高并发场景下调用mmap和mumap映射内存申请MGA的时候会触发该bug,导致出现了高等待Latch MGA shared context Latch性能问题
我们也与Oracle官方对该问题进行了沟通,确认AIX操作系统上存在高并发场景下引发Bug 33352794-Latch MGA shared context Latch高等待的问题,至于为什么只在AIX版本上存在,是由于Oracle虽然已经修复了代码的bug问题,但在平台做代码合并的时候并没有对AIX的平台做合并,导致在AIX版本上存在该特有的Bug 3335279
问题修复:
1 可以通过安装19.13及以上的RU、RUR补丁或者应用oneoff补丁33352794进行修复
2 在原设的Bug里面提到了一个可能的规避方法:通过设置隐含参数"_ksipc_service_mask"=0,通过修改控制与内核相关的进程间通信服务掩码禁用MGA进行规避,但这个规避Oracle不建议进行设置,不做推荐!