【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)
2 个赞
txn-total-size-limit,可以设置的再大点,最大是10G,不过太大有可能会遇到oom或者其他问题,建议更好的处理方法是事务变小点
2 个赞
SET @@SESSION.tidb_dml_batch_size = 500;这个我设置成500,还是不行
txn-total-size-limit:这个是设置的3G,500条数据肯定不超过3G
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 分钟后被自动关闭。不再允许新回复。