Sql ClickHouse分布式表慢

Sql ClickHouse分布式表慢,sql,clickhouse,Sql,Clickhouse,我已经在ClickHouse中创建了一个分布式表,共有两个碎片和一个数据副本 SELECT * FROM system.clusters ┌─cluster──────────────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name────┬─host_address─┬─port─┬─is_local─┬─user────┬─default_database─┐ │ twoshardsonereplicas │ 1 │

我已经在ClickHouse中创建了一个分布式表,共有两个碎片和一个数据副本

SELECT *
FROM system.clusters

┌─cluster──────────────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name────┬─host_address─┬─port─┬─is_local─┬─user────┬─default_database─┐
│ twoshardsonereplicas │         1 │            1 │           1 │ 192.168.8.70 │ 192.168.8.70 │ 9000 │        0 │ default │                  │
│ twoshardsonereplicas │         2 │            1 │           1 │ 192.168.8.71 │ 192.168.8.71 │ 9000 │        1 │ default │                  │
└──────────────────────┴───────────┴──────────────┴─────────────┴──────────────┴──────────────┴──────┴──────────┴─────────┴──────────────────┘
我有表exit和exit_all,这是分布式表。我将exit_all插入表中,它将数据均匀地分布在我的两台服务器上。从本地exit表查询一半记录需要0.15秒,但在exit_上查询所有记录需要0.45秒。我预计,由于处理被拆分,它将花费大约相同的时间

当我计算我的查询时,我可以看到,对于这个查询,数据被完美地分割,或者在100k上的100条记录内,因此并非所有数据都位于一台服务器上


编辑:每2-3次查询,查询时间也会出现较大差异,其中有些查询的时间会从1.3秒减少到750ms。

回答第一个问题:

分布式表可能会给处理增加一些开销。由于您正在执行两个查询,通过https传递结果并合并它们,最后两个部分可以增加0.3秒的处理时间,通过http将数据从一台机器传递到另一台机器(在本地网络中)可能需要超过0.1秒

Tl;dr You’s distributed查询仍需约0.15秒,但传输和合并结果需要更多时间

回答第二个问题:
Clickhouse具有内部查询缓存,因此重复查询可能会或可能不会触发从缓存中提取数据,从而加快缓存速度。因此,您会注意到查询时间的不一致性

我想我会在几个月后回来更新这个。这个问题最终被证明是一个网络瓶颈。如果您有类似的问题,我建议您使用类似nload的工具来查看集群中的网络使用情况。在切换到10gbps网卡时,一些需要30-40秒的查询实际上需要2-5秒。

感谢您的回答,我可以通过或多或少的排序来更改查询,从而看到这种情况。我想,在对数据进行真正排序之前,必须对数据进行聚合是有道理的。通过一些优化,两台服务器的性能提高了约30%。我假设对于受检索速度限制的工作负载,您可以看到更大的性能改进,尤其是在数据量更大的情况下。我只在大约2000万条记录上运行这些查询。