删除数据transaction is too large,size:104857608

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】/
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】删除数据transaction is too large,size:104857608

https://docs.pingcap.com/zh/tidb/stable/migration-tidb-faq#transaction-too-large-是什么原因怎么解决

事务不能太大,有限制。.删除的数据太大的话 分批操作。

你每个delete limit 10000
写个for循环 放在后台

https://docs.pingcap.com/zh/tidb/stable/sql-statement-batch 自动分批处理

1 个赞

解决方案
1、调整txn-total-size-limit参数
2、拆分成小事务分批

delete最好加where按主键拆分成多个语句执行

把大事务拆分成小事务,是数据库优化的一部分。同时也避免大事务引起数据库挂起阻塞其它事务。

删除操作超过事物的默认最大值了

这样越删越慢,还是分批吧

  1. 调整事务大小限制:您可以通过调整 txn-total-size-limit 配置项来增加允许的最大事务大小。这可以在 TiDB 的配置文件中进行设置。不过,在做出这样的调整之前,请确保您了解潜在的风险,并做好相应的性能评估。
  2. 拆分事务:如果可能,尝试将大事务拆分成多个小事务来执行。这样可以避免单个事务过大而触发限制。
  3. 优化数据模型:考虑是否可以优化您的数据模型,减少单次操作的数据量。例如,通过分批处理或者使用批量操作接口。
  4. 检查是否有不必要的操作:有时候,事务中可能包含了不必要的操作,比如重复的写入或者读取。检查并优化事务中的操作可能会减少事务的大小。
  5. 使用 TiDB 的最佳实践:遵循 TiDB 的最佳实践进行开发,比如避免在事务中进行大表的全文扫描等。

我也有个表40亿数据要删掉30个亿,循环删除越删越慢,不大可行

拆分事务

BATCH ON test.t2.id LIMIT 1 delete FROM t2 ;
7才支持。5还是用我的

要不是实时写入数据,建个新表把有效数据写入,然后删表,改名,快点

拆成小事务,循环删除把

分批删除

分批处理吧

拆分事务,5000左右一提交