减少 ClickHouse 中的资源消耗

Posted

技术标签:

【中文标题】减少 ClickHouse 中的资源消耗【英文标题】:Reduce resource consumption in ClickHouse 【发布时间】:2021-02-05 17:23:19 【问题描述】:

桌子

CREATE TABLE events
(
    site_id UInt64,
    name    String
    -- other columns
)
ENGINE = CollapsingMergeTree(sign_flag)
PARTITION BY site_id
ORDER BY (name)
SETTINGS index_granularity = 8192;

查询

SELECT 'wtf',
       *
FROM events
WHERE site_id = 1 AND
      name = 'some_name'
LIMIT 100000;

日志

SELECT formatReadableSize(read_bytes)    AS read_bytes,
       formatReadableSize(memory_usage)  AS memory_usage,
       formatReadableQuantity(read_rows) AS read_rows,
       query_duration_ms / 1000 AS query_duration_sec,
       query
FROM system.query_log
WHERE query LIKE '%wtf%'
ORDER BY
    event_time DESC
LIMIT 100;
+------------+--------------+--------------+--------------------+
| read_bytes | memory_usage | read_rows    | query_duration_sec |
+------------+--------------+--------------+--------------------+
| 578.41 MiB | 131.95 MiB   | 1.01 million | 10.773             |
+------------+--------------+--------------+--------------------+

我认为日志中的数字非常大。

如何优化它或者我错过了一些关于服务器配置的东西?

【问题讨论】:

考虑为这个查询定义另一个主键 ORDER BY (name, site_id)。选择 PK 是设计中非常重要的一部分,要选择正确的人需要观察所有用例的图片(参见clickhouse.tech/docs/en/engines/table-engines/mergetree-family/…***.com/a/62557177/303298)。 如果你从一个有 800 列的表中查询* ,CH 可以吃掉 10GB RAM 来读取 1 行。因为每列都有缓冲区。 CH 每列创建 >2MB 的缓冲区。 @vladimir 更改PK后read_rows = 106.50 thousand | query_duration_sec = 1.175。请移步评论回复,我会采纳的。 【参考方案1】:

考虑为这个查询定义另一个主键 ORDER BY (name, site_id)

选择PK是设计中非常重要的一部分,要选择正确的人需要观察所有用例的图片。 详情见:

ClickHouse: Selecting the Primary Key *** #62556274.

【讨论】:

以上是关于减少 ClickHouse 中的资源消耗的主要内容,如果未能解决你的问题,请参考以下文章

减少查询中的资源使用

高级系统架构师培训要点:减少资源消耗,靠虚拟代理方案解决了!

性能测试如何减少本机误差

调整 leaf_size 以减少 Scikit-Learn KNN 中的时间消耗

是否可以使用 clickhouse-jdbc 驱动程序对 clickhouse 进行批量更新?

桌面客户端性能提升,优化使用资源消耗