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+|千兆网卡|
【概述】 场景 + 问题概述
tidb_mem_quota_query设置了12G,分片插入执行了好几次,每次都是在3500s左右报Out Of Memory Quota![conn_id=13],我查询慢sql,发现慢sql表记录占用内存60G,可是我TIDB配置总共才16G,请问是什么原因呢???
插入的数据量在1千万左右。

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

1 个赞

看看有没有开启 oom-use-tmp-storage,使用到临时磁盘文件

3 个赞

oom-use-tmp-storage

  • 设置是否在单条 SQL 语句的内存使用超出 mem-quota-query 限制时为某些算子启用临时磁盘。
  • 默认值:true

这个是用的默认值,true。那请问我是关闭它?你这个只是解释为什么是60G是吗?

1 个赞

那我有个疑问。
我sql运行内存超出限制,tidb使用临时磁盘的机制继续支持sql运行,为什么最后还是报[Out Of Memory Quota!]

2 个赞

如果超过了临时磁盘 tmp-storage-quota,可能报错 Out Of Global Storage Quota,目前支持落盘的算子有:Sort、MergeJoin、HashJoin、HashAgg,其他 join 内存统计还不准确,暂不支持落盘
https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage/#数据落盘

临时磁盘相关参数都是使用的默认值,没有设置上限。关键最后报的是[Out Of Memory Quota!]

INL_JOIN 使用的内存不支持落盘

应该是使用磁盘了。

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