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 中,它将数据均匀地分布在我的两台服务器上。当我从本地出口表查询一半的记录时,它需要 0.15 秒,但在 exit_all 上执行时需要 0.45 秒。我希望它花费大约相同的时间,因为处理是分开的。

当我计算我的查询时,我可以看到数据被完美地分割为这个查询,或者在 100k 的 100 条记录中,所以它不像所有数据都位于一台服务器上。

编辑:每 2-3 个查询的查询时间也会有很大差异,对于某些查询,对于同一查询,查询时间将从 1.3 秒下降到 750 毫秒。

4

2 回答 2

1

以为几个月后我会回来并更新此内容。这个问题原来是网络瓶颈。如果您有类似的问题,我建议您使用 nload 之类的东西来查看整个集群的网络使用情况。切换到 10gbps 网卡时,一些需要 30-40 秒的查询实际上需要 2-5 秒。

于 2018-03-15T15:03:30.873 回答
1

回答第一个问题:

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

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

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

于 2017-06-08T17:26:52.603 回答