Sql ClickHouse分布式表慢
我已经在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 │
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万条记录上运行这些查询。