sql执行报错:Out Of Memory Quota![conn_id=13]

【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+|千兆网卡|
【概述】 场景 + 问题概述
插入的数据量在1千万左右。tidb_mem_quota_query设置了12G,分片插入执行了好几次,每次都是在3500s左右报Out Of Memory Quota![conn_id=13],,请问怎么解决这个问题???请问怎么解决这个问题???

sql较长,我简化成以下:
set @@SESSION.tidb_mem_quota_query = 12 << 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 = 111267
AND oi.status_id IN( 80, 70)
AND oi.discrepant_data = 0

OOM 单独跑 后面的 select 语句

1、 config设置enable-batch-dml=1;需要reload tidb 2、 启用autocommit

你说的不是问题所在啊,,我已经开启分批提交了

这样开启是不生效的

生效了啊,确认是每次5000的往里面插入数据

tidb d的内存监控贴下


你瞅瞅,tidb内存并没有超出最大内存

你这不是生产环境吧,先按我前面说的,配置参数启用batch_dml, 在我的环境测试了一张15亿的表全表insert …select ,内存保持在5G左右,5.2.1版本

%E5%9B%BE%E7%89%87

你说的这个参数我真改了。5.2.3是这个,enable-batch-dml:true

单条SQL使用内存默认为1G,可以修改mem-quota-query参数来调整

2 Likes

修改一下mem-quota-query参数的值

3 Likes

参考:https://docs.pingcap.com/zh/tidb/v4.0/configure-memory-usage

1 Like

我在sql设置的临时变量不行吗?set @@SESSION.tidb_mem_quota_query = 12 << 30;

我在sql设置的临时变量不行吗1?set @@SESSION.tidb_mem_quota_query = 12 << 30;

从dashbaord或者I_S的STATEMENTS_SUMMARY、STATEMENTS_SUMMARY_HISTORY 看下你的insert SQL 的MAX_MEM能到多少, 看内存监控图 5000的批次提交比我的30000次批次提交还高1倍,不排除有啥bug

1 Like

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