【BE】大数据量分页查询出现OOM

【详述】问题详细描述
大数据量的表在分页查询时出现Mem usage has exceed the limit of BE的错误
表数据量大约74888370条,
分页size 100万, 当取到第10页时一直出现这个错误
(1064, u’Memory of process exceed limit. Pipeline Backend: 10.19.52.229, fragment: 8aca3de4-ac0f-11ed-91ac-525400e8ff47 Used: 109271389916, Limit: 109254885211. Mem usage has exceed the limit of BE’)
【背景】做过哪些操作?
【业务影响】
【StarRocks版本】2.4.0
【集群规模】3fe(1 follower+2observer)+8be(fe与be分离部署)
【机器信息】CPU虚拟核/内存/网卡,例如:32C/128G/万兆
【联系方式】为了在解决问题过程中能及时联系到您获取一些日志信息,请补充下您的联系方式,例如:社区群12-金谡-jinsu@moojing.com
【附件】

  • Profile信息,如何获取profile
  • 并行度:show variables like ‘%parallel_fragment_exec_instance_num%’;
    show variables like ‘%pipeline_dop%’;
  • pipeline是否开启:show variables like ‘%pipeline%’;
  • 执行计划:explain costs + sql
  • be节点cpu和内存使用率截图

把这个模版配置下,跑的过程中看下内存监控StarRocks-Overview.json (292.7 KB)

这个问题有解决吗

有这方面的问题吗 ? 可以发下对应的内存监控信息

是上述的 StarRocks-Overview.json ,这具体怎样使用呢

StarRocks 2.4 Grafana监控模板及指标项整理 参考这个 这个是监控模版

这个是分页查询报内存超限的时候be内存,cpu的监控情况

mysql> SELECT 数据接收时间, 事件名称, 投递环境, 错误信息提示, 数据明细, COUNT(1) OVER () AS totalCount_ FROM (SELECT FROM_UNIXTIME(#server_time / 1000) AS 数据接收时间, IF(#event_name = ‘_user’,‘用户属性’,#event_name) AS 事件名称, IF(platform = ‘SERVER’,‘正式环境’,‘测试环境’) AS 投递环境, GET_JSON_STRING(err_msg, CONCAT(’$.’,6)) AS 错误信息提示, DATA AS 数据明细 FROM bdc_dwd.err_info_100023_real_time WHERE platform = ‘SERVER’ AND dt BETWEEN DATE_FORMAT(DATE_ADD(‘2023-05-28’,-1),’%Y-%m-%d’) AND DATE_FORMAT(DATE_ADD(‘2023-06-06’,1),’%Y-%m-%d’) AND FROM_UNIXTIME(#process_time/ 1000) BETWEEN ‘2023-05-28 00:00:00’ AND ‘2023-06-06 00:00:00’ AND JSON_EXISTS(err_msg, CONCAT(’$.’,6))) ta ORDER BY 1 DESC LIMIT 17985060,10;
ERROR 1064 (HY000): Memory of process exceed limit. try consume:13510798882111488 Used: 63309823400, Limit: 109189581741. Mem usage has exceed the limit of BE

这个应该修过了,升级到2.4的最新

我们使用版本是2.5.4版本,还会出现这个问题,2.5.4没有修复这个问题吗

这个窗口会累积大量内存,导致单个string 列超过4G,2.5版本后面会优化这块报错

高版本会优化列拼接


2.5.4版本 大量分页数据时 就会出现。目前是不是只能提高查询内存的方式 解决问题呢?
SET exec_mem_limit = N * 1024 * 1024 * 1024;

可以先调大内存试试