500万数据更新操作可以直接执行吗还是需要分批
受限于
txn-entry-size-limit
txn-total-size-limit
这两个参数的大小,实际操作最好还是拆分
这个数据量倾向于分批
分批,不要搞大事务
内存看看够整体执行也没问题
整体执行可能会受限于事务大小的限制,就算恰好没超过限制可以执行,也可以预料得到执行时间会比较久。
建议分批处理,这也是官方推荐的最佳实践。
一次性更新500万数据,可能会有两个问题:
1、超过事务大小,无法执行成功;
2、占用内存过大,导致TiDB节点OOM;
建议还是拆批。
要是集群没有别人用,也有足够的时间等待执行,一次搞定对数据库来事没啥技术问题
建议是分批执行,除非硬件资源特别给力。
测试环境跑下,评估下时间,根据业务窗口期定
分批写循环commit。
可以参考:MySQL数据库批量删除数据
set innodb_lock_wait_timeout=60;
/* define procedure to run loop to delte 10000 rows at a time /
DELIMITER $$
CREATE PROCEDURE DeleteActions()
BEGIN
DECLARE counter INT DEFAULT 1;
REPEAT
delete from actions_action where action NOT IN (‘like’, ‘subscribe’) limit 10000; commit;
SET counter = counter + 1;
SELECT SLEEP(2);
UNTIL counter >= 200
END REPEAT;
END$$
DELIMITER ;
/ call the procedure */
CALL DeleteActions();
建议拆批
谢谢大佬,这2个参数
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。