Ce que signifie l’exception
Too many parts lorsqu’un INSERT ferait dépasser une limite configurée du nombre de parts de données actives dans une table MergeTree. L’exception inclut souvent le message Merges are processing significantly slower than inserts.
Chaque INSERT synchrone crée au moins une part de données. Si une insertion contient des lignes pour plusieurs valeurs de partition, ClickHouse peut créer une part pour chaque partition concernée. Les fusions en arrière-plan combinent les petites parts en parts plus volumineuses, mais si de nouvelles parts sont créées plus rapidement que ClickHouse ne peut les fusionner, le nombre de parts actives continue d’augmenter.
L’exception peut être déclenchée par l’un ou l’autre de ces paramètres :
parts_to_throw_insert, qui limite le nombre de parts actives dans une seule partition.max_parts_in_total, qui limite le nombre total de parts actives dans une table.
Identifier la cause
max_parts_in_total, comptez toutes les parts actives de la table :
- Des insertions synchrones fréquentes et de petite taille.
- Une clé de partitionnement à forte cardinalité.
- Des insertions contenant des lignes pour de nombreuses valeurs de partition.
- Des fusions en arrière-plan qui n’arrivent pas à suivre en raison d’un débit de stockage limité, d’un espace disque libre insuffisant ou d’une contention sur d’autres ressources.
system.merges et consulter les logs du serveur pour repérer les échecs de fusion.
Résoudre l’exception
Insertions synchrones par lot
INSERT synchrone par seconde. Des insertions moins fréquentes mais plus volumineuses créent moins de parts et réduisent le travail des fusions en arrière-plan.
Utiliser l’insertion asynchrone
wait_for_async_insert = 1 afin que ClickHouse ne confirme une insertion qu’après l’écriture réussie des données.
Vérifier la clé de partitionnement
Analyser les goulots d’étranglement des fusions
Évitez d’augmenter les limites de parts comme correctif principal
parts_to_throw_insert ou max_parts_in_total ne résout pas la cause de la création excessive de parts. Des limites plus élevées peuvent retarder l’exception, mais aussi augmenter la surcharge du système de fichiers et des métadonnées, tout en dégradant les performances des requêtes. Ne modifiez ces paramètres qu’après avoir identifié la cause et vérifié que le système dispose d’une capacité suffisante.
Vérifier le rétablissement
system.merges jusqu’à ce que le retard accumulé soit résorbé.