在 Clickhouse 中运行非常简单的查询时超出内存限制

Posted

技术标签:

【中文标题】在 Clickhouse 中运行非常简单的查询时超出内存限制【英文标题】:Memory limit exceeded when running very simple query in Clickhouse 【发布时间】:2021-12-28 01:35:33 【问题描述】:

我有一个使用ReplacingMergeTree 引擎的非常大的表(730M 行)。即使在运行微不足道的查询时,我也开始出现“超出内存限制(用于查询)”。

例如,SELECT * FROM my_table LIMIT 5 给出:

Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (for query) exceeded: would use 24.50 GiB (attempt to allocate chunk of 26009509376 bytes), maximum: 9.31 GiB: While executing MergeTree. 

为什么 Clickhouse 尝试使用 24.5G 内存进行简单的 SELECT 查询,我该如何解决?

【问题讨论】:

【参考方案1】:

因为许多并行线程读取所有列和 65k 行并为每列分配数 MB。

表格有多少列?

试试

set max_block_size=512, max_threads=1, max_rows_to_read=512;
SELECT * FROM my_table LIMIT 5;

【讨论】:

以上是关于在 Clickhouse 中运行非常简单的查询时超出内存限制的主要内容,如果未能解决你的问题,请参考以下文章

在 oracle sql developer 中加入查询快,在 odp.net 中超慢

Python使用ch-orm对ClickHouse简单查询及写入

ClickHouse开源数据库

在 ClickHouse 中使用 JOINS 和检查 NULL 的 Tableau 查询失败

ClickHouse 内核原理图文详解关于分区索引标记和压缩数据的协同工作...

ClickHouse 极简教程