バルクインサート
上記のメカニズムからわかるように、挿入サイズに関係なく一定のオーバーヘッドが発生するため、バッチサイズは取り込みスループットを最適化するうえで最も重要な要素になります。挿入をバッチ化することで、総挿入時間に占めるオーバーヘッドの割合が減少し、処理効率が向上します。
データは少なくとも 1,000 行単位、理想的には 10,000~100,000 行のバッチで挿入することを推奨します。回数を減らして 1 回あたりの挿入を大きくすることで、書き込まれるパーツ数が減少し、マージ処理の負荷が抑えられ、システム全体のリソース使用量も低下します。
同期挿入戦略を有効に機能させるには、このクライアント側でのバッチ化が必須です。
クライアント側でデータをバッチ化できない場合、ClickHouse はバッチ化をサーバー側に移す非同期挿入をサポートしています(こちらを参照)。
ヒント
挿入のサイズに関わらず、挿入クエリの数は 1 秒あたり 1 件程度に抑えることを推奨します。この推奨の理由は、作成されたパーツがバックグラウンドでより大きなパーツへマージされる(読み取りクエリ向けにデータを最適化する)ためであり、1 秒あたりに送信される挿入クエリが多すぎると、バックグラウンドでのマージ処理が新規パーツ数に追いつけなくなる可能性があるためです。ただし、非同期挿入を使用する場合は、1 秒あたりの挿入クエリ数をより高くしても問題ありません(非同期挿入を参照してください)。