ClickHouseに2つのシャードと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に挿入し、私の2台のサーバにデータを均等に分配します。レコードの半分でローカル出口テーブルからクエリを実行すると、0.15秒かかるが、exit_allで実行すると0.45秒かかる。処理が分割されてから同じ時間がかかることが予想されます。
データがこのクエリで完全に分割されているか、または100kで100レコード内にデータが分割されていることがわかります。すべてのデータが1つのサーバーに格納されているわけではありません。
編集:2-3回のクエリごとに大きな違いがあります。同じクエリの場合は、1.3秒から750msになります。
答えをありがとう、私は多かれ少なかれ並べ替えを使用してクエリを変更することでこれが起こるのを見ることができます。私はあなたが本当にそれを並べ替えることができる前にあなたがデータを集計する必要があることが理にかなっていると思います。いくつかの最適化では、2台のサーバーで約30%のパフォーマンス改善が得られます。私は、検索速度に拘束されているワークロードでは、特にデータ量が大きいほどパフォーマンスが向上すると考えています。私は約20Mのレコードでこれらのクエリを実行していました。 – ozzieisaacs