云数据库ClickHouse执行查询任务时提示“Memory limit (for query) exceeded”错误
更新时间:
问题描述
阿里云云数据库ClickHouse执行查询任务时,实例内存升高,提示类似以下错误:
Memory limit (for query) exceeded
Memory limit (for total) exceeded
问题原因
实例内存升高的原因如下:
- 查询内存占用过多
- 实例总内存使用超限
解决方案
ClickHouse服务端对所有查询线程都配有memory tracker
,同一个查询下的所有线程tracker会汇报给一个memory tracker for query
,再上层还是memory tracker for total
。您可以根据情况采取如下解决方案:
- 遇到
Memory limit (for query)
超限报错说明是查询内存占用过多(实例总内存的70%)导致失败,这种情况下您需要垂直升配提高实例内存规模。如何进行垂直升配,详情请参见社区兼容版变配和扩缩容。 - 遇到
Memory limit (for total)
超限报错说明是实例总内存使用超限(实例总内存的90%),这种情况下您可以尝试降低查询并发,如果仍然不行则可能是后台异步任务占用了比较大的内存(常常是写入后主键合并任务),您需要垂直升配提高实例内存规模。
更多信息
那些查询操作导致CPU和内存升高,您可以在system.query_log系统表中自助查看CPU、内存高期间的查询日志,里面有每个查询的CPU消耗和内存消耗统计。更多信息请参见system.query_log。将访问日志导出的命令如下:
SELECT * FROM system.query_log INTO OUTFILE access.log
适用于
- 云数据库ClickHouse
反馈
- 本页导读
文档反馈