2017-06-05 15 views
1

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になります。

答えて

1

最初の質問に答えるには

分散テーブルは処理にいくらかのオーバーヘッドを加える可能性があります。 2つのクエリを実行し、結果をhttpsで渡してマージするので、最後の2つの部分は0.3秒の処理を追加することができます。http経由で1台のマシンから別のマシン(ローカルネットワーク内)にデータを渡すだけで0.1秒。

Tlの; DRあなたが分散しているクエリはまだしかし

は、2番目の質問に答えるために多くの時間を転送し、その結果がかかるマージする、〜0.15秒を取っている: Clickhouseはそうかもしれないクエリを繰り返し、内部クエリキャッシュを持っていますキャッシュからのデータの引き出しをトリガしないため、高速になります。それで、なぜあなたは照会時間の不一致に気付いているのですか?

+0

答えをありがとう、私は多かれ少なかれ並べ替えを使用してクエリを変更することでこれが起こるのを見ることができます。私はあなたが本当にそれを並べ替えることができる前にあなたがデータを集計する必要があることが理にかなっていると思います。いくつかの最適化では、2台のサーバーで約30%のパフォーマンス改善が得られます。私は、検索速度に拘束されているワークロードでは、特にデータ量が大きいほどパフォーマンスが向上すると考えています。私は約20Mのレコードでこれらのクエリを実行していました。 – ozzieisaacs