设置了分批导入,为什么还报 Transaction is too large

【TiDB 版本】
5.7.25-TiDB-v5.2.3
【 TiDB 使用环境】
|组件|CPU|内存|本地存储|网络|
|TiDB|8 核+|16 GB+|SAS, 200 GB+|千兆网卡|
|PD|4 核+|8 GB+|SAS, 200 GB+|千兆网卡|
|TiKV|8 核+|32 GB+|SSD, 200 GB+|千兆网卡|
|TiFlash|32 核+|64 GB+|SSD, 200 GB+|千兆网卡|
【概述】 场景 + 问题概述
设置了分批导入,为什么还报 Transaction is too large???
数据量在5千万左右。
sql较长,我简化成以下:
set @@SESSION.tidb_mem_quota_query = 8 << 30;
SET @@SESSION.tidb_batch_insert = 1;
SET @@SESSION.tidb_dml_batch_size = 5000;
INSERT INTO ods_order_item_base_two (
order_id,
item_no,

)
SELECT /*+ INL_JOIN(oi,oid,oie,ei,eica) */
oi.id AS order_id,
oi.item_no,


FROM
order_item oi
INNER JOIN order_item_details oid ON oi.item_no = oid.item_no
INNER JOIN order_item_extra oie ON oi.item_no = oie.item_no
INNER JOIN expenses_item ei ON ei.id = oi.setmanag_item_id
LEFT JOIN expenses_item_client_authorization eica ON eica.expenses_item_id = oi.setmanag_item_id AND eica.user_info_id = oi.merchant_code
where
0=0
and oi.cust_merch_id <= 111350
AND oi.status_id IN( 80, 70)
AND oi.discrepant_data = 0

3 个赞

分批再弄小点或txn-total-size-limit再调大点(<10G):smiley::smiley:

2 个赞

txn-total-size-limit,可以设置的再大点,最大是10G,不过太大有可能会遇到oom或者其他问题,建议更好的处理方法是事务变小点

2 个赞

SET @@SESSION.tidb_dml_batch_size = 500;这个我设置成500,还是不行
txn-total-size-limit:这个是设置的3G,500条数据肯定不超过3G

2 个赞

,可以看下这两个参数有没有开启

2 个赞

请问再个参数在哪个配置文件,没有找到。5.2的版本需要手动开启?

1 个赞

SET @@SESSION.tidb_batch_insert = 1;
SET @@SESSION.tidb_dml_batch_size = 500;

你说的是tidb_batch_insert 这个吗?我设置开启了啊,值为1

2 个赞

看你上面写的是5000,您这调低点,比如100,先试一下,这个参数是否起作用,如果单行大小是6M的话,有可能达到这个值

2 个赞

不用图形工具,用mysql客户端直接连数据库,设置上面参数试试

1 个赞

tidb_dml_batch_size 调低后好使了吗,应该不是图形工具的问题,navicat和
mysql客户端本质一样的。

2 个赞

分批了确定下有没有分事务,建议单次5000试下

1 个赞

试试把 enable-batch-dml 设置成 true
https://github.com/pingcap/tidb/blob/8db3a8dc5620d6c48c1a2cadbfcb03488c9787c4/config/config.toml.example#L55

3 个赞

感谢感谢,是这个问题

1 个赞

实在不行,就自己控制事务大小吧。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。