减少 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 中的时间消耗