ClickHouse Distributed Table Slow

时间:2017-06-05 21:07:59

标签: 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 │            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。

2 个答案:

答案 0 :(得分:1)

回答第一个问题:

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

Tl; dr你的分布式查询仍然需要~0.15秒,转移和合并结果需要更多时间

回答第二个问题: Clickhouse具有内部查询缓存,因此重复查询可能会也可能不会触发从缓存中撤出数据,从而使其更快。因此,您注意到查询时间不一致的原因。

答案 1 :(得分:1)

以为我会在几个月后回来并更新此信息。这个问题变成了一个网络瓶颈。我建议你是否有类似的问题使用像nload这样的东西来查看集群中的网络使用情况。切换到10gbps网卡时,一些查询耗时30-40秒实际需要2-5秒。