このページはClickHouse Cloudには該当しません。ここで説明している手順は、ClickHouse Cloud サービスでは自動化されています。
CPU スケーリングガバナー
performance スケーリングガバナーを使用してください。on-demand スケーリングガバナーは、継続的に高い負荷がかかる環境ではパフォーマンスが大幅に低下します。
CPU の制限事項
dmesg で確認できます。
この制限は、データセンター側で設定されることもあります。負荷をかけた状態で監視するには、turbostat を使用できます。
RAM
cat /proc/sys/vm/overcommit_memory の値は 0 または 1 にする必要があります。次を実行します
perf top を使って、メモリ管理に関してカーネル内でどれだけ時間が費やされているかを確認します。
永続的な huge pages も割り当てる必要はありません。
16GB未満のRAMを使用する
config.xml内のmark cacheのサイズを小さくします。500 MBまで下げられますが、ゼロには設定できません。- クエリ処理スレッド数を
1まで減らします。 max_block_sizeを8192まで下げます。1024程度の値でも実用的です。max_download_threadsを1に下げます。input_format_parallel_parsingとoutput_format_parallel_formattingを0に設定します。- ログテーブルへの書き込みを無効にします。これにより、バックグラウンドのマージタスクがログテーブルのマージを実行するためにRAMを確保し続けるのを防げます。
asynchronous_metric_log、metric_log、text_log、trace_logを無効にします。
- メモリアロケータによってcacheされたメモリをflushするには、
SYSTEM JEMALLOC PURGEコマンドを実行できます。 - 低メモリのマシンでは、S3やKafkaのインテグレーションの使用は推奨しません。これらはバッファにかなりのメモリを必要とするためです。
ストレージサブシステム
RAID
mdadm) のほうが適しています。
RAID-10 を作成する場合は、far レイアウトを選択してください。
予算に余裕があるなら、RAID-10 を選んでください。
LVM 単体 (RAID や mdadm なし) でも問題ありませんが、LVM で RAID を構成したり mdadm と組み合わせたりする方法はあまり検証されておらず、ミスが起きる可能性も高くなります
(誤った chunk サイズの選択、chunk の不整合、誤った RAID タイプの選択、ディスクのクリーンアップ忘れなど) 。LVM の利用に自信があるなら、
使用しても問題ありません。
ディスクが 4 台を超える場合は、RAID-5 ではなく、RAID-6 (推奨) または RAID-50 を使用してください。
RAID-5、RAID-6、または RAID-50 を使用する場合は、デフォルト値が通常は最適ではないため、必ず stripe_cache_size を増やしてください。
2 * num_devices * chunk_size_in_bytes / 4096.
64 KB のブロックサイズは、ほとんどの RAID 構成で十分です。clickhouse-server の平均書き込みサイズは約 1 MB (1024 KB) であるため、推奨されるストライプサイズも 1 MB です。必要に応じて、RAID アレイ内の非パリティディスク数で 1 MB を割った値にブロックサイズを設定することで最適化できます。これにより、各書き込みが使用可能なすべての非パリティディスクに並列に分散されます。
ブロックサイズは、小さすぎても大きすぎてもいけません。
SSD では RAID-0 を使用できます。
RAID を使用するかどうかにかかわらず、データ保護のために常にレプリケーションを使用してください。
キュー長を長めに設定して NCQ を有効にします。HDD では mq-deadline または CFQ スケジューラを選択し、SSD では noop を選択します。‘readahead’ 設定は減らさないでください。
HDD では、書き込み cache を有効にしてください。
OS で NVME および SSD ディスクに対して fstrim が有効になっていることを確認してください (通常は cronjob または systemd service で実装されます) 。
ファイルシステム
noatime を設定してください。XFS も適しています。
そのほかのほとんどのファイルシステムでも、通常は問題なく動作します。
FAT-32 と exFAT は、ハードリンクに対応していないためサポートされていません。
圧縮ファイルシステムは使用しないでください。ClickHouse 自体がより適切に圧縮を行うためです。
暗号化ファイルシステムの使用も推奨されません。ClickHouse には組み込みの暗号化機能があり、そちらのほうが優れているためです。
ClickHouse は NFS 上でも動作しますが、最適な選択肢ではありません。
Linux カーネル
ネットワーク
Huge Pages
madvise に設定してください。古いカーネル (5.9 より前) では、THP を always に設定すると、パフォーマンスが大幅に低下することがあります。これは、特に 64 GB 以上の RAM を搭載したシステムで、カーネルがメモリのデフラグメンテーションに過剰な時間を費やすためです。カーネル 5.9 では proactive compaction が導入され、THP をより適切に処理できるようになりましたが、THP が always に設定されていると ClickHouse は起動時に引き続き警告を出します。そのため、カーネルのバージョンにかかわらず、推奨される設定は madvise です。
/etc/default/grub を編集し、GRUB_CMDLINE_LINUX_DEFAULT オプションに transparent_hugepage=madvise を追加します。
sudo update-grub コマンドを実行し、変更を反映させるために再起動します。
ハイパーバイザーの設定
nova.conf で。
libvirt を使用している場合は、次のように設定します
cpuid 命令から正しい情報を取得できるようにするために重要です。
そうしないと、ハイパーバイザーが古い CPU モデル上で動作している場合に、Illegal instruction によるクラッシュが発生することがあります。
ClickHouse Keeper と ZooKeeper
minSessionTimeout 設定は変更しないでください。値を大きくすると ClickHouse の再起動の安定性に影響する可能性があります。
デフォルト設定の ZooKeeper は時限爆弾です:
デフォルト構成では、ZooKeeper サーバーは古い snapshots と logs のファイルを削除しません (autopurge を参照) 。これは operator の責任です。
この爆弾は解除しなければなりません。
以下の ZooKeeper (3.5.1) 構成は、大規模な本番環境で使用されています:
zoo.cfg:
ウイルス対策ソフト
/var/lib/clickhouse) があるフォルダーをスキャン対象から除外するよう設定してください。そうしないと、パフォーマンスが低下したり、データのインジェスト中やバックグラウンドでのマージ中に予期しないエラーが発生したりすることがあります。