Doris 修改 mem_limit

1. Doris查询报错。

查看be节点日志。log/be.INFO 如下:

 mem pool.cpp:131] try to allocate a new buffer failed:Memory limit exceeded: ExecNode:Exprs :AGGREGATION NODE(d=15):6c729c44502441ef-b74efd2a2551cb4b:IruConsume failedbutes=4h96nrocess whole consumtion=22183146688memmit=26834019942

0784 15:52:24521668 64800 status.h:20] warning: Status msg truncated,0K: Could not allocate aggrerate expression imput valueExecMode:Exprs:AGGREGATIN NODE (id-15):6c720c4d57441ef-b74efd2a2551cb4b could not allocate 16.88 B without exceeding limit,Error occurred on backend XXX.XXX.XXX.XXX by fragment 6c?20c4d507441ef-b74efd2a2551cb55

 官网解释:当查询或导入报错Memory limit exceeded时,可能的原因:进程内存超限、系统剩余可用内存不足、超过单次查询执行的内存上限。 链接:内存超限错误分析 - Apache Doris

2. 原因

doirs在查询时,为了防止用户的消耗内存过大。进行了内存控制,一个查询任务,在单个 BE 节点上默认使用不超过 2GB 内存。

遇到内存超限时,用户应该尽量通过优化自己的 sql 语句来解决。

如果确切发现2GB内存不能满足,可以手动设置内存参数。

显示查询内存限制:

//单位是 byte

SHOW VARIABLES LIKE "%mem_limit%";
2. 解决

修改Doris mem_limit参数

//设置为4G  这个只对当前会话有效
SET exec_mem_limit = 4294967296;

//全局永久设置
SET GLOBAL exec_mem_limit = 4294967296;

注:设置全局变量后,断开 session 重新登录,参数将永久生效。这里笔者没有重新登录,SHOW VARIABLES LIKE "%mem_limit%"; 时值已经改变,但是查询仍报错!!!!

若还不生效,重启be节点!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值