为什么在 TiDB 中执行包含数十万行数据的批量更新或插入的大事务,极易导致 TiDB Server 节点内存飙升甚至 OOM?其底层的内存分配机制是怎样的?
大事务是 TiDB Server OOM 的常见原因。建议把大批量更新/插入拆成小批次(每批1000-5000行),用循环提交。另外检查下是不是有慢查询一次性扫描了大量数据。
传统模式下,TiDB 在事务提交前会把整批变更全部缓存在 TiDB Server 的内存里,不落地、不拆分、不流式,数十万行 DML 会直接把内存撑爆。
大事务是 TiDB Server OOM 的常见原因。建议把大批量更新/插入拆成小批次(每批1000-5000行),用循环提交。另外检查下是不是有慢查询一次性扫描了大量数据。
这个遇到过,因为分布式,所以数据都是从各个tikv节点拿到一个tidb server节点进行处理的,返回到tidb server节点的数据越多,越容易oom