You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB执行含group_concat()的查询时内存不足,需调整哪个变量?

解决MariaDB执行GROUP_CONCAT关联查询时的内存不足问题

问题场景

在安装了MariaDB的CentOS 7服务器上执行以下SQL语句时:

SELECT h.id,
       h.name,
       group_concat(distinct d.name ORDER BY d.name SEPARATOR " ") AS descriptions 
FROM inventar h 
LEFT JOIN descriptions d ON(FIND_IN_SET(d.id, h.description_id) > 0) GROUP BY h.id,h.description_id 
ORDER BY h.name asc;

触发内存不足错误:

ERROR 5 (HY000): Out of memory (Needed 65535816 bytes)

已检查临时表相关变量,结果如下:

Variable_nameValue
max_heap_table_size1048576000
tmp_disk_table_size18446744073709551615
tmp_memory_table_size12572426240
tmp_table_size12572426240

所有临时表相关变量值均远大于错误提示中需要的65535816字节,排除临时表容量限制问题。

问题根源

错误核心原因是group_concat_max_len变量默认值过小。MariaDB中group_concat_max_len默认限制GROUP_CONCAT函数可拼接的最大字符串长度(默认值通常为65535字节,即64KB),而本次查询需要拼接的内容总长度超过该限制,从而触发内存不足报错。

解决方法

1. 临时调整(仅当前会话生效)

执行以下SQL临时修改当前会话的限制:

SET SESSION group_concat_max_len = 104857600; -- 设置为100MB,可根据实际需求调整

2. 全局永久调整(服务器重启后仍生效)

先执行全局设置:

SET GLOBAL group_concat_max_len = 104857600;

然后编辑MariaDB配置文件(通常为/etc/my.cnf或/etc/mysql/my.cnf),在[mysqld]段添加如下配置:

[mysqld]
group_concat_max_len = 104857600

保存后重启MariaDB服务,配置即可永久生效。

内容的提问来源于stack exchange,提问作者user1980099

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:25:12