我在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,它在我的两台服务器上均匀分配数据。当我从本地退出表中查询一半记录时需要0.15秒,但是当在exit_all上执行时需要0.45秒。我希望自处理拆分以来花费大约相同的时间。
我可以看到,当我计算我的查询时,数据被完美地分割为此查询或100k内的100条记录,因此并不是所有数据都位于一台服务器上。
编辑:同样在每2-3次查询中查询时间变化很大,对于某些查询,对于同一查询,它将从1.3秒下降到750ms。
答案 0 :(得分:1)
回答第一个问题:
分布式表可能会增加一些处理开销。由于您正在进行两个查询,通过https传递结果并合并它们,最后两个部分可以添加0.3秒的处理,只需将数据从一台机器传递到另一台(在本地网络中)通过http可以大大超过0.1秒。
Tl; dr你的分布式查询仍然需要~0.15秒,转移和合并结果需要更多时间
回答第二个问题: Clickhouse具有内部查询缓存,因此重复查询可能会也可能不会触发从缓存中撤出数据,从而使其更快。因此,您注意到查询时间不一致的原因。
答案 1 :(得分:1)
以为我会在几个月后回来并更新此信息。这个问题变成了一个网络瓶颈。我建议你是否有类似的问题使用像nload这样的东西来查看集群中的网络使用情况。切换到10gbps网卡时,一些查询耗时30-40秒实际需要2-5秒。