我在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秒。我希望,由于处理是分开的,它将花费大约相同的时间。
我可以看到,当我计算我的查询时,对于这个查询,数据是完全分开的,或者在100 k上的100条记录中,所以并不是所有的数据都位于一台服务器上。
编辑:每2-3次查询的查询时间也会有很大的差异,对于某些查询,对于相同的查询,它将从1.3秒下降到750 to。
发布于 2017-06-08 17:26:52
要回答第一个问题:
分布式表可以为处理增加一定的开销。由于您正在执行两个查询,通过https传递结果并将它们合并,最后两个部分可以很好地增加0.3秒的处理时间,只需通过http将数据从一台计算机传递到另一台计算机(在本地网络中)就可以花费超过0.1秒的时间。
您的分布式查询仍然需要0.15秒,但是传输和合并结果需要更多的时间
要回答第二个问题: Clickhouse有内部查询缓存,所以重复查询可能会也可能不会触发缓存中的数据提取,从而使其更快。因此,您为什么注意到与查询时间不一致。
发布于 2018-03-15 15:03:30
我想几个月后我会回来更新这个。这个问题最终成为了网络瓶颈。我建议,如果您有类似的问题要使用类似的nload来查看整个集群的网络使用情况。一些需要30-40秒的查询在切换到10 10gbps网卡时实际上花费了2-5秒。
https://stackoverflow.com/questions/44377737
复制相似问题