OPTIMIZE FINAL dans la plupart des cas, car elle lance
des opérations gourmandes en ressources qui peuvent affecter les performances du cluster.
OPTIMIZE FINAL vs FINAL
OPTIMIZE FINAL n’est pas la même chose que FINAL, dont l’utilisation est parfois nécessaire
pour obtenir des résultats sans doublons, notamment avec ReplacingMergeTree. En général,
FINAL peut être utilisé sans problème si vos requêtes appliquent des filtres sur les mêmes colonnes que celles
de votre clé primaire.Pourquoi l’éviter ?
C’est coûteux
OPTIMIZE FINAL force ClickHouse à fusionner toutes les active parts en une seule part, même si des fusions importantes ont déjà eu lieu. Cela implique :
- Décompresser toutes les parts
- Fusionner les données
- Les recomprimer
- Écrire la part finale sur disque ou dans le stockage objet
Il ignore les garde-fous de sécurité
OPTIMIZE FINAL ignore ce garde-fou, ce qui signifie :
- Il peut tenter de fusionner plusieurs parts de 150 Go en une seule part énorme
- Cela peut entraîner des temps de fusion très longs, une forte pression sur la mémoire ou même des erreurs de mémoire insuffisante
- Ces grosses parts peuvent ensuite devenir difficiles à fusionner davantage : les tentatives de fusion ultérieures échouent alors pour les raisons indiquées ci-dessus. Lorsque des fusions sont nécessaires pour garantir un comportement correct au moment de la requête, cela peut avoir des conséquences indésirables, comme l’accumulation de doublons dans un ReplacingMergeTree, ce qui dégrade les performances au moment de la requête.