问题现象
SQL_EXEC_CTX_ID 模块实际内存占用不大,但因为内存碎片问题将其放大到一个较大的值且内存无法释放,导致执行报错 -4013。
问题原因
由于 ps cache 的长生命周期导致产生大量内存碎片。一个 2M 块中因为 ps cache 使用了一部分而无法释放。
问题的风险及影响
频繁的 ps cache 申请淘汰,长时间累积可能产生严重的内存碎片问题,导致执行报错 -4013。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响的版本
OceanBase 数据库 V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V3.1.2 BP10(oceanbase-3.1.2-110000022022092714)及之后版本、V3.2.3 BP6(oceanbase-3.2.3.3-106000102022111521)及之后版本。
如果已经发生泄漏只能通过重启集群释放内存。
规避方式:
- 频繁触发的场景需要评估该场景是否适合使用 ps,可以改成文本模式。