Update 字段时候 transaction too large, len:300002

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】 centos7
  • TiDB 版本】 3.05
  • 磁盘型号
  • 集群节点分布】 2tidb 3pd 5tikv
  • 数据量 & region 数量 & 副本数】 1000万数据量
  • 问题描述(我做了什么)】 update request_keyword_task set status=0

8004 - transaction too large, len:300002 时间: 63.054s

  • 关键词

TiDB 这边对单个事务是有限制的。具体可以参考官方文档: Transaction too large 是什么原因。建议对单个大事务进行拆分。

可是 这个 update request_keyword_task set status =0 语句 没法用存储过程 写啊 而且我并不想用事务

我的意思是说 我的应用场景是 定时有很多的 这种更新状态的 update语句 ,我在mysql用的是事件触发,一次就执行完毕,那我要是迁移到tidb的话 也写不了存储过程 ,怎么处理呢?

建议添加 where 条件进行事务拆分如: update request_keyword_task set status =0 where id > 0 and id < 10000 。

额 。。。这样 执行多次么 也行