ClickHouse 分布式 Table 慢
ClickHouse Distributed Table Slow
我在 ClickHouse 中创建了一个分布式 table,总共有两个分片和一个数据副本。
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 │ │
└──────────────────────┴───────────┴──────────────┴─────────────┴──────────────┴──────────────┴──────┴──────────┴─────────┴──────────────────┘
我有 tables 出口和 exit_all 分布式 table。我插入 table exit_all 并在我的两台服务器上均匀分布数据。当我从本地出口 table 查询一半的记录时,它需要 0.15 秒,但在 exit_all 上执行时,它需要 0.45 秒。我希望它花费大约相同的时间,因为处理是分开的。
我可以看到,当我计算我的查询时,该查询的数据被完美地分割,或者在 100k 的 100 条记录内,所以并不是所有数据都位于一台服务器上。
编辑:每 2-3 个查询的查询时间也会出现很大差异,对于某些查询,同一查询的查询时间将从 1.3 秒减少到 750 毫秒。
回答第一个问题:
分布式表可能会增加一些处理开销。由于您正在执行两个查询,通过 https 传递结果并合并它们,最后两个部分可以很好地增加 0.3 秒的处理时间,只需通过 http 将数据从一台机器传递到另一台机器(在本地网络中)就可以花费超过 0.1 秒秒。
Tl;dr 你的分布式查询仍然需要大约 0.15 秒,但是传输和合并结果需要更多时间
回答第二个问题:
Clickhouse 具有内部查询缓存,因此重复查询可能会或可能不会触发从缓存中提取数据以使其更快。因此,为什么您注意到查询时间不一致。
以为几个月后我会回来更新这个。问题原来是网络瓶颈。如果您有类似的问题,我建议您使用 nload 之类的工具来查看整个集群的网络使用情况。切换到 10gbps 网卡时,一些需要 30-40 秒的查询实际上需要 2-5 秒。
我在 ClickHouse 中创建了一个分布式 table,总共有两个分片和一个数据副本。
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 │ │
└──────────────────────┴───────────┴──────────────┴─────────────┴──────────────┴──────────────┴──────┴──────────┴─────────┴──────────────────┘
我有 tables 出口和 exit_all 分布式 table。我插入 table exit_all 并在我的两台服务器上均匀分布数据。当我从本地出口 table 查询一半的记录时,它需要 0.15 秒,但在 exit_all 上执行时,它需要 0.45 秒。我希望它花费大约相同的时间,因为处理是分开的。
我可以看到,当我计算我的查询时,该查询的数据被完美地分割,或者在 100k 的 100 条记录内,所以并不是所有数据都位于一台服务器上。
编辑:每 2-3 个查询的查询时间也会出现很大差异,对于某些查询,同一查询的查询时间将从 1.3 秒减少到 750 毫秒。
回答第一个问题:
分布式表可能会增加一些处理开销。由于您正在执行两个查询,通过 https 传递结果并合并它们,最后两个部分可以很好地增加 0.3 秒的处理时间,只需通过 http 将数据从一台机器传递到另一台机器(在本地网络中)就可以花费超过 0.1 秒秒。
Tl;dr 你的分布式查询仍然需要大约 0.15 秒,但是传输和合并结果需要更多时间
回答第二个问题: Clickhouse 具有内部查询缓存,因此重复查询可能会或可能不会触发从缓存中提取数据以使其更快。因此,为什么您注意到查询时间不一致。
以为几个月后我会回来更新这个。问题原来是网络瓶颈。如果您有类似的问题,我建议您使用 nload 之类的工具来查看整个集群的网络使用情况。切换到 10gbps 网卡时,一些需要 30-40 秒的查询实际上需要 2-5 秒。