【问题标题】:ClickHouse Distributed Table SlowClickHouse 分布式表慢
【发布时间】:2017-11-06 17:54:27
【问题描述】:

我在 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 毫秒。

【问题讨论】:

    标签: sql clickhouse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      回答第一个问题:

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

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

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

      【讨论】:

      • 感谢您的回答,我可以通过或多或少的排序更改我的查询来看到这种情况。我想在真正对数据进行排序之前必须汇总数据是有道理的。通过一些优化,我在两台服务器上获得了大约 30% 的性能提升。我假设对于受检索速度限制的工作负载,您可以看到更大的性能改进,尤其是在数据量更大的情况下。我只对大约 20M 条记录运行这些查询。
      猜你喜欢
      • 2021-01-05
      • 2023-03-18
      • 2020-10-18
      • 2020-09-13
      • 2018-08-18
      • 2019-05-26
      • 2019-11-20
      • 2021-12-11
      • 2022-01-22
      相关资源
      最近更新 更多