我在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\都是分布式表。我在表中插入exit\u all,它将数据均匀地分布在我的两个服务器上。当我从本地exit表查询一半的记录时,需要0.15秒,而在exit表上查询所有记录时,需要0.45秒。我希望它需要大约相同的时间,因为处理是分裂的。
我可以看到,当我计算我的查询时,数据被完美地拆分为这个查询,或者在100k上的100条记录内,所以并不是所有的数据都放在一台服务器上。
编辑:每2-3个查询的查询时间也会有很大的差异,其中有些查询的时间会从1.3秒减少到750ms。
2条答案
按热度按时间ccgok5k51#
回答第一个问题:
分布式表会给处理增加一些开销。由于您正在执行两个查询,通过https传递结果并合并它们,最后两个部分可以很好地增加0.3秒的处理时间,只需通过http将数据从一台机器传递到另一台机器(在本地网络中)就可以花费超过0.1秒的时间。
热释光;dr you're分布式查询仍需约0.15秒,但传输和合并结果需要更多时间
回答第二个问题:clickhouse有内部查询缓存,因此重复一个查询可能会或可能不会触发从缓存中提取数据,从而使其速度更快。因此,您会注意到查询时间的不一致性。
carvr3hs2#
我想我会在几个月后回来更新这个。这个问题原来是一个网络瓶颈。如果您有类似的问题,我建议您使用nload之类的工具来查看集群中的网络使用情况。在切换到10gbps网卡时,一些需要30-40秒的查询实际上需要2-5秒。