问题现象
转储卡住无法向前推进。
关键诊断信息
触发条件
如果在 insert ignore 的语句过程中发生多次冻结,有可能会触发该问题。常见的租户有 insert ignore 插入的数据量很大且租户的内存配置比较少,冻结相对容易发生。
问题原因
为修复 insert ignore 会出现的正确性问题,OBServer 事务层逻辑保证在 insert ignore 的执行过程中不落下日志,执行完后落日志。转储机制依赖所有 memtable 的写入都已经日志提交成功,insert ignore 执行中不写日志就会导致转储无法完成。最后导致大的 insert ignore 事务卡住转储的问题。
问题的风险及影响
转储卡住无法向前推进。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响的版本
OceanBase 数据库 V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本。
解决方法及规避方式
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V3.2.3 BP8(oceanbase-3.2.3.3-108000062023041511)及之后版本、V3.2.4 BP2(oceanbase-3.2.4.2-102000042023022717)及之后版本。
停掉
insert ignore后卡住的转储应该可以恢复。
其他说明
上述问题存在 OceanBase 数据库 V3.x 版本。OceanBase 数据库 V2.x 版本未支持大事务能力,不存在该问题;OceanBase 数据库 V4.x 在事务层实现进行了大的变化,理论上也不会存在上述问题。