Trier par cardinalité (de la plus faible à la plus élevée)
La granularité temporelle est importante
runnable editable
Concentrez-vous sur les requêtes individuelles, pas sur les moyennes
Mémoire et parcours des lignes
GROUP BY user_id, error_message, url_path crée un état d’agrégation distinct en mémoire pour chaque combinaison unique des trois valeurs prises ensemble. Avec davantage d’utilisateurs, de types d’erreurs et de chemins d’URL, vous pouvez facilement générer des millions d’états d’agrégation qui doivent être conservés simultanément en mémoire.
Pour les cas extrêmes, Sentry utilise l’échantillonnage déterministe. Un échantillon de 10 % réduit l’utilisation mémoire de 90 % tout en conservant une précision d’environ 5 % pour la plupart des agrégations :
cityHash64() produit des valeurs de hachage identiques pour une même entrée, donc user_id = 12345 sera toujours haché vers la même valeur, ce qui garantit que cet utilisateur figurera soit toujours dans votre échantillon de 10 %, soit jamais — sans variation d’une requête à l’autre.
Optimisation des masques de bits de Sentry
Vidéos
- Lost in the Haystack - Optimizing High Cardinality Aggregations - Retours d’expérience de Sentry en production sur l’optimisation de la mémoire
- ClickHouse Performance Analysis - Alexey Milovidov sur la méthodologie de débogage
- ClickHouse Meetup: Query Optimization Techniques - Stratégies d’optimisation de la communauté