【问题标题】:Clickhouse Memory IssueClickhouse 内存问题
【发布时间】:2021-10-06 01:42:36
【问题描述】:

我有一个包含大约 20 亿行的表,我尝试从中查询 max(id)。 id 不是表的排序键,表使用的是表引擎mergeTree

无论我尝试什么,都会出现内存错误。这不仅限于此一个查询。一旦我尝试完全(垂直)查询任何表以查找数据,我的 12 GB 内存就不够了。现在我知道我可以添加更多,但这不是重点。当它没有足够的内存时,clickhouse 是不是故意抛出错误?有没有设置让 clickhouse 改用磁盘?

SQL 错误 [241]:ClickHouse 异常,代码:241,主机:XXXXXX,端口:8123;代码:241,e.displayText() = DB::Exception:超出内存限制(用于查询):将使用 9.32 GiB(尝试分配 9440624 字节的块),最大值:9.31 GiB(版本 21.4.6.55(官方构建) )

【问题讨论】:

标签: clickhouse clickhouse-client


【解决方案1】:

Alexey Milovidov 不同意将最低 RAM 要求写入 CH 文档。但我会说 32 GB 是生产 CH 的最低要求。

至少:

  • 您需要降低标记缓存,因为它是 5GB!!!!默认情况下(设置为 500MB)。
  • 您需要将 max_block_size 降低到 16384。
  • 您需要将 max_threads 降低到 2。
  • 您需要将 max_bytes_before_external_group_by 设置为 3GB。
  • 您需要将 aggregation_memory_efficient_merge_threads 设置为 1。

【讨论】:

  • 能否详细说明每一点,为什么?谢谢!
  • 所以没有 32gb CH 就无法正确管理其内存消耗?所以在这个假设下,升级到 32gb 内存可以解决我所有的问题?
  • 我会说这是在浪费时间,用不到 32GB RAM 的 CH。
  • @DennyCrane SQL 错误 [241]:ClickHouse 异常,代码:241,主机:XXXXXX,端口:8123;代码:241,e.displayText() = DB::Exception:超出内存限制(总计):将使用 55.84 GiB(尝试分配 4231632 字节的块),最大值:55.83 GiB:(在读取列 _version 时):(而从标记 0 中读取 /var/lib/clickhouse/store/21e/21ede8eb-ba4e-4f11-814c-a216f452cd57/0_919_3015_9/ 部分,max_rows_to_read = 16384):在执行 MergeTree(版本 21.4.6.55(官方版本))时增加了 4 倍的 ram 数量,表格大小现在只有 ram 的两倍。
  • @ThomasMiller 您会感到震惊,但对于您的用例来说,这是 CH 的预期行为。让我们继续在 github 中。
【解决方案2】:

对我来说,有效的是将最大服务器内存使用量从 0.9 更改为 1.2。

1.2 --> config.xml

感谢您的回复,因为它最终使我明白了这一点。

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 2017-09-05
    • 2019-08-27
    • 2021-04-05
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-12-19
    相关资源
    最近更新 更多