- 【TiDB 版本】:
tidb-server -V
Release Version: v4.0.0-alpha-1327-g86ff21b07
Git Commit Hash: 86ff21b07630a5cef4af053970e5c20182b740fb
Git Branch: master
UTC Build Time: 2020-01-07 12:58:31
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
* 【问题描述】:删除一天的数据提示tracsation is too large ,size 34746528
参数:
stmt-count-limit = 5000000000000
txn-total-size-limit= 10000000
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
QBin
(Bin)
2
由于分布式事务要做两阶段提交,并且底层还需要做 Raft 复制,如果一个事务非常大,会使得提交过程非常慢,并且会卡住下面的 Raft 复制流程。为了避免系统出现被卡住的情况,我们对事务的大小做了限制:
- 单个事务包含的 SQL 语句不超过 5000 条(默认)
- 单条 KV entry 不超过 6MB
- KV entry 的总条数不超过 30w
- KV entry 的总大小不超过 100MB
可以参考下过往的帖子:
QBin
(Bin)
5
tidb_batch_delete 以及 tidb_batch_size 需要配合使用。(注意会破坏事务原子性)。可以根据报错情况再适当调小 tidb_batch_size。
QBin
(Bin)
7
就是开启了 tidb_batch_delete 之后可以配合设置 tidb_batch_size 再做尝试,如:
set @@tidb_batch_delete = 1 , @@tidb_dml_batch_size = 100; delete from .......;
还是继续报错。
set @@tidb_batch_delete = 1 , @@tidb_dml_batch_size = 20000000000000;
delete from if_date_resource_source where date='2020-01-05';
select count(*) from if_date_resource_source where date='2020-01-05';
+----------+
| count(*) |
+----------+
| 163344 |
+----------+
QBin
(Bin)
10
麻烦调小一点 @@tidb_dml_batch_size 多谢,还是报错是指当前 batch 还是超过限制了。
QBin
(Bin)
12
set @@tidb_batch_delete = 1 , @@tidb_dml_batch_size = 1,@@tidb_batch_commit = 1 ,@@autocommit = 1 ;
delete from if_date_resource_source where date='2020-01-05';
麻烦再按照上述的命令试一下。
enable-batch-dml 设置成 TRUE 这个添加在配置文件的哪个内容下呢?放在[performance] 不生效
问一下开启batch 会破会事物的原子性是怎么样的场景呢? 事物执行失败不会全部回滚?还是怎么样呢
还有一个问题,我测试 600M 的数据写入Mysql 和写入tidb ,批量限制500条提交一次,mysql 用了2分钟,tidb 用了11分钟,这个是什么原因会导致这么大的差异呢?和tidb server 服务器的硬件性能有关系吗,还是有别的其他原因?
qizheng
(qizheng)
20
请提供具体的版本、配置、监控等信息,并开新帖提问,谢谢~