Cette page ne concerne pas ClickHouse Cloud. La procédure décrite ici est automatisée dans les services ClickHouse Cloud.
Gouverneur de fréquence du CPU
performance. Le gouverneur on-demand fonctionne nettement moins bien lorsque la charge reste constamment élevée.
Limitations du CPU
dmesg pour vérifier si la fréquence d’horloge du CPU a été limitée à cause d’une surchauffe.
Cette limitation peut également être imposée de l’extérieur, au niveau du datacenter. Vous pouvez utiliser turbostat pour la surveiller sous charge.
RAM
cat /proc/sys/vm/overcommit_memory doit renvoyer 0 ou 1. Exécutez
perf top pour surveiller le temps que le noyau consacre à la gestion de la mémoire.
Les huge pages permanentes n’ont pas non plus besoin d’être allouées.
Utilisation de moins de 16 GB de RAM
- Réduisez la taille du mark cache dans le
config.xml. Elle peut être définie à seulement 500 MB, mais elle ne peut pas être définie à zéro. - Réduisez le nombre de threads de traitement des requêtes à
1. - Réduisez
max_block_sizeà8192. Des valeurs aussi basses que1024peuvent rester pratiques. - Réduisez
max_download_threadsà1. - Définissez
input_format_parallel_parsingetoutput_format_parallel_formattingà0. - Désactivez l’écriture dans les tables de logs, car cela amène la tâche de merge en arrière-plan à réserver de la RAM pour effectuer des merges des tables de logs. Désactivez
asynchronous_metric_log,metric_log,text_log,trace_log.
- Pour vider la mémoire mise en cache par l’allocateur mémoire, vous pouvez exécuter la commande
SYSTEM JEMALLOC PURGE. - Nous ne recommandons pas d’utiliser les intégrations S3 ou Kafka sur des machines disposant de peu de mémoire, car elles nécessitent une quantité importante de mémoire pour les buffers.
Sous-système de stockage
RAID
mdadm).
Lors de la création d’un RAID-10, sélectionnez la disposition far.
Si votre budget le permet, choisissez RAID-10.
LVM seul (sans RAID ni mdadm) convient, mais créer un RAID avec LVM ou le combiner avec mdadm est une option moins éprouvée, avec davantage de risques d’erreurs
(sélection d’une taille de chunk incorrecte ; mauvais alignement des chunks ; choix d’un type de RAID incorrect ; oubli du nettoyage des disques). Si vous maîtrisez
LVM, rien ne s’oppose à son utilisation.
Si vous avez plus de 4 disques, utilisez RAID-6 (de préférence) ou RAID-50, plutôt que RAID-5.
Lorsque vous utilisez RAID-5, RAID-6 ou RAID-50, augmentez toujours stripe_cache_size, car la valeur par défaut n’est généralement pas le meilleur choix.
2 * num_devices * chunk_size_in_bytes / 4096.
Une taille de bloc de 64 KB suffit pour la plupart des configurations RAID. La taille d’écriture moyenne de clickhouse-server est d’environ 1 MB (1024 KB) ; la taille de stripe recommandée est donc également de 1 MB. Si nécessaire, la taille de bloc peut être optimisée en la définissant sur 1 MB divisé par le nombre de disques sans parité dans la grappe RAID, afin que chaque écriture soit parallélisée sur tous les disques sans parité disponibles.
Ne définissez jamais une taille de bloc trop petite ou trop grande.
Vous pouvez utiliser RAID-0 sur SSD.
Que vous utilisiez RAID ou non, utilisez toujours la réplication pour sécuriser les données.
Activez le NCQ avec une file d’attente longue. Pour les HDD, choisissez l’ordonnanceur mq-deadline ou CFQ, et pour les SSD, choisissez noop. Ne réduisez pas le paramètre ‘readahead’.
Pour les HDD, activez le cache d’écriture.
Assurez-vous que fstrim est activé pour les disques NVME et SSD sur votre système d’exploitation (généralement via une tâche cron ou un service systemd).
Système de fichiers
noatime. XFS fonctionne également bien.
La plupart des autres systèmes de fichiers devraient aussi convenir.
FAT-32 et exFAT ne sont pas pris en charge en raison de l’absence de liens physiques.
N’utilisez pas de systèmes de fichiers compressés, car ClickHouse assure lui-même la compression, et de façon plus efficace.
Il est déconseillé d’utiliser des systèmes de fichiers chiffrés, car vous pouvez utiliser le chiffrement intégré de ClickHouse, qui est plus performant.
Bien que ClickHouse puisse fonctionner sur NFS, ce n’est pas l’idéal.
Noyau Linux
Réseau
Huge Pages
madvise. Sur les anciens noyaux (avant la version 5.9), un réglage de THP sur always peut entraîner une dégradation importante des performances : le noyau passe trop de temps à défragmenter la mémoire, en particulier sur les systèmes dotés de plus de 64 Go de RAM. Le noyau 5.9 a introduit la compaction proactive, qui gère bien mieux les THP, mais ClickHouse affiche toujours un avertissement au démarrage si THP est défini sur always ; madvise reste donc le réglage recommandé, quelle que soit la version du noyau.
/etc/default/grub pour ajouter transparent_hugepage=madvise à l’option GRUB_CMDLINE_LINUX_DEFAULT :
sudo update-grub, puis redémarrez pour appliquer les changements.
Configuration de l’hyperviseur
nova.conf.
Si vous utilisez libvirt, définissez
cpuid.
Sinon, vous risquez d’avoir des plantages Illegal instruction si l’hyperviseur s’exécute sur d’anciens modèles de CPU.
ClickHouse Keeper et ZooKeeper
minSessionTimeout : des valeurs élevées peuvent affecter la stabilité des redémarrages de ClickHouse.
Avec les paramètres par défaut, ZooKeeper est une bombe à retardement :
Le serveur ZooKeeper ne supprime pas les fichiers des anciens snapshots et logs avec la configuration par défaut (voir autopurge), et cela relève de la responsabilité de l’opérateur.
Cette bombe doit être désamorcée.
La configuration ZooKeeper (3.5.1) ci-dessous est utilisée dans un grand environnement de production :
zoo.cfg:
Logiciel antivirus
/var/lib/clickhouse) ; sinon, les performances risquent d’être dégradées et vous pourriez rencontrer des erreurs inattendues lors de l’ingestion des données et des fusions en arrière-plan.