删除操作触发OOM,但是删除的数据并不多。

是不是tidb 节点的内存太小了啊,限制使用的最大内存的参设是不是没有设置啊

从报错 “Error 1105 (HY000): Out Of Memory Quota” 来看,是 TiDB 执行删除操作时出现了内存配额不足的问题。

可以看看执行计划,以及调整内存配置

最终是如何解决的呀?

本次 OOM 是由于 DELETE 语句缺少索引导致全表扫描,进而内存溢出。通过为 record_time 字段创建索引,让 SQL 高效执行,即可解决问题。

1 个赞

explain看到的是预估执行计划,explain analyze看到的是真实的执行计划。
执行explain analyze看看,应该走索引才对。

1 个赞

这个估计因为全表扫描导致的,扫描全表数据去找要删除的数据,删除数量不多,但是I/O扫描范围大,你的表有500w的数据

感谢大佬分享

同问,最终解决了吗?学习中。

建议在record_time添加索引,重新执行试试

按照这个逻辑可以试试的

全表扫描的可能性还是挺大的

历史数据删除怎么会导致OOM呢,看不明白

没有索引吧?只保留7天数据,何不深度下用分区删除?

可能涉及事务

对, 可以改为按天分区的表

分批加小事务执行呢

个人感觉这种场景用分区删除占用的资源会更少些

改成分区表

可能是因为全表扫描导致的