大事务报错 Transaction is too large, size: 104857768

我有个大事务执行失败,查了下文档需要修改配置文件中 txn-total-size-limit参数修改,修改完还需要reload集群太麻烦了。
有没有设置系统变量可以临时修改的方法?

或者有没有大佬帮忙优化下sql能循环执行的
update
a, b
set b.material_code = a.new_material_no
where a.old_material_no = b.material_code

5.4版本没这个功能

这是要全表更新啊?用主键limit一下?

BATCH | PingCAP 文档中心

batch update


tidb-server的配置参数,应该没有需要临时修改的方法,还是需要reload tidb-server

是的,有个2000多万行记录的表有个字段需要全表更新。

5.4不支持batch

学习了
txn-total-size-limit

用这个方案来:https://book.tidb.io/session4/chapter6/page-inaction.html

结合窗口函数,将数据划分成小段,多个SQL实现

这么写,分页还是需要手动填写,2000多万行记录工作量有点大啊

我算了下需要分成100多段sql。。。

不用啊,分页范围是窗口函数算出来的啊,也可以直接用SQL把最终要执行的SQL拼出来再执行

1 个赞

用SQL生成是最直接的。
也可用notepad++的列编辑,或者vim的记录器来写,工作量其实不大。

分吧,一把梭哈的话,容易把集群打挂。

set tidb_mem_quota_query=给个很大的值再执行

报错的是事务 txn-total-size-limit这个参数和查询的限制没关系

结合窗口函数写了个循环执行了下,一把把测试环境搞死了