查询报错信息显示如下
err: Error 1105: errCode = 2, detailMessage = Memory limit exceeded:<consuming tracker:<Query#Id=803945612dab4026-9a62e0f1775ffa37>, failed alloc size 0, exceeded tracker:<Query#Id=803945612dab4026-9a62e0f1775ffa37>, limit 2.00 GB, peak used 12.03 GB, current used 12.03 GB>, executing msg:<exec node:<ExecNode:VSORT_NODE (id=18)>, vsort, while sorting input.>. backend 192.168.30.116 process memory used 59.63 GB, limit 200.00 GB. If query tracker exceed, `set exec_mem_limit=8G` to change limit, details see be.INFO.
解决方法
为了防止用户的一个查询可能因为消耗内存过大。查询进行了内存控制,一个查询任务,在单个 BE 节点上默认使用不超过 2GB 内存。
用户在使用时,如果发现报 Memory limit exceeded 错误,一般是超过内存限制了。
遇到内存超限时,用户应该尽量通过优化自己的 sql 语句来解决。
如果确切发现2GB内存不能满足,可以手动设置内存参数。
显示查询内存限制:
mysql> SHOW VARIABLES LIKE "%mem_limit%";
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| exec_mem_limit| 2147483648 |
+---------------+------------+
1 row in set (0.00 sec)
exec_mem_limit 的单位是 byte,可以通过 SET 命令改变 exec_mem_limit 的值。如改为 8GB。文章来源:https://www.toymoban.com/news/detail-686969.html
mysql> SET exec_mem_limit = 8589934592; #只是针对本次的查询修改,全局加上global
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE "%mem_limit%";
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| exec_mem_limit| 8589934592 |
+---------------+------------+
1 row in set (0.00 sec)
(1)以上该修改为 session 级别,仅在当前连接 session 内有效。断开重连则会变回默认值。
(2)如果需要修改全局变量,可以这样设置:SET GLOBAL exec_mem_limit = 8589934592;。设置完成后,断开 session 重新登录,参数将永久生效。文章来源地址https://www.toymoban.com/news/detail-686969.html
到了这里,关于doris查询报错err: Error 1105: errCode = 2, detailMessage = Memory limit exceeded:<consuming tracker:...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!