- ClickHouse Cloud
- Autogéré
Dans ClickHouse Cloud, vous pouvez obtenir l’ID de la requête en cliquant sur ”…” tout à droite de la barre au-dessus du résultat de la requête (à côté du bouton bascule tableau/graphique). Cela ouvre un menu contextuel dans lequel vous pouvez cliquer sur “Copy query ID”.Utilisez
clusterAllReplicas(default, system.trace_log) pour interroger tous les nœuds du cluster :Utilisation du profiler de requêtes dans les déploiements autogérés
1
Installer ClickHouse avec les informations de débogage
Installez le packageclickhouse-common-static-dbg :- Suivez les instructions de l’étape « Configurer le dépôt Debian »
- Exécutez
sudo apt-get install clickhouse-server clickhouse-client clickhouse-common-static-dbgpour installer les fichiers binaires compilés de ClickHouse avec les informations de débogage - Exécutez
sudo service clickhouse-server startpour démarrer le serveur - Exécutez
clickhouse-client. Les symboles de débogage declickhouse-common-static-dbgseront automatiquement pris en compte par le serveur ; vous n’avez rien de particulier à faire pour les activer
2
Vérifier la configuration du serveur
Assurez-vous que la sectiontrace_log de votre fichier de configuration du serveur est configurée. Elle est activée par défaut :3
Configurer les temporisateurs de profilage
Configurez les paramètresquery_profiler_cpu_time_period_ns ou query_profiler_real_time_period_ns.
Les deux paramètres peuvent être utilisés simultanément.Ces paramètres vous permettent de configurer les temporisateurs du profiler.
Comme il s’agit de paramètres de session, vous pouvez définir une fréquence d’échantillonnage différente pour l’ensemble du serveur, pour des utilisateurs individuels ou des profils utilisateur, pour votre session interactive et pour chaque requête.La fréquence d’échantillonnage par défaut est d’un échantillon par seconde, et les temporisateurs CPU et temps réel sont tous deux activés.
Cette fréquence permet de collecter suffisamment d’informations sur votre cluster ClickHouse sans affecter les performances du serveur.
Si vous devez profiler chaque requête individuellement, utilisez une fréquence d’échantillonnage plus élevée.4
Analyser la table système trace_log
Pour analyser la table système trace_log, activez les fonctions d’introspection avec le paramètre allow_introspection_functions :Pour des raisons de sécurité, les fonctions d’introspection sont désactivées par défaut
addressToLine, addressToLineWithInlines, addressToSymbol et demangle pour obtenir les noms des fonctions et leur position dans le code de ClickHouse.
Pour obtenir un profil pour une requête donnée, vous devez agréger les données de la table trace_log.
Vous pouvez agréger les données par fonction individuelle ou par trace de pile complète.Création de flame graphs avec la fonction flameGraph
flameGraph, qui crée un flame graph directement à partir des traces de pile stockées dans trace_log.
Le résultat est un tableau de chaînes, dans un format compatible avec flamegraph.pl.
Syntaxe :
traces— une stacktrace.Array(UInt64).size— une taille d’allocation pour le profilage mémoire.Int64.ptr— une adresse d’allocation.UInt64.
ptr est différent de zéro, flameGraph associe les allocations (size > 0) et les désallocations (size < 0) ayant la même taille et le même pointeur.
Seules les allocations qui n’ont pas été libérées sont affichées.
Les désallocations sans correspondance sont ignorées.
Flame graph du CPU
Les requêtes ci-dessous nécessitent que flamegraph.pl soit installé.Pour l’installer, exécutez :Remplacez
flamegraph.pl dans les requêtes suivantes par le chemin d’accès à flamegraph.pl sur votre machineFlame graph de la mémoire — toutes les allocations
Flame graph de la mémoire — allocations non libérées
Flame graph de la mémoire — allocations actives à un instant donné
Trouver l’utilisation de la mémoire au fil du temps
Trouvez l’instant où l’utilisation mémoire est maximale
Créer un flame graph des allocations actives à cet instant
Construisez un flame graph des libérations de mémoire après ce point temporel (pour comprendre ce qui a été libéré par la suite)
Exemple
- Filtre les données
trace_logselon un identifiant de requête et la date du jour. - Agrège par trace de pile.
- Utilise des fonctions d’introspection pour obtenir un rapport indiquant :
- Les noms des symboles et les fonctions du code source correspondantes.
- Les emplacements de ces fonctions dans le code source.