ClickHouse Query Analyzer query fingerprints weergave met gegroepeerde queries en geaggregeerde prestatiestatistieken en trend-analyse
Back to blog
ClickHouseOpen SourceSelf-HostingDeveloper Tools

ClickHouse Query Analyzer: Queries Debuggen Zonder Gedoe

4 min read

Een single-binary web app voor het analyseren van ClickHouse query performance. Flame graphs, thread-analyses, query fingerprints en tabeloptimalisatie. Gebouwd omdat de bestaande tools niet genoeg waren.

Het Probleem

ClickHouse is snel, tot het dat niet is. Een query die gisteren 200ms duurde, neemt opeens 30 seconden in beslag en je moet uitzoeken waarom. Of een query faalt met een cryptische foutmelding en je wil weten wat er gebeurd is.

Het ingebouwde /play endpoint laat je queries uitvoeren, en dat is vrijwel alles. Geen profiling, geen geschiedenis, geen manier om te zien wat een query écht doet. Je eindigt met handmatige queries tegen system.query_log, system.trace_log en een handvol andere systeemtabellen, timestamps en IDs met de hand aan elkaar knopen.

De tools die wél bestaan (CHUI, diverse GUI clients) zijn gebouwd voor het uitvoeren van queries. Een trage query debuggen of een foutmelding onderzoeken? Niet hun focus. Er was niets dat de systeemtabellen van ClickHouse behandelde als een volwaardige debugging-interface.

Dus ik bouwde er een. Nou ja, ik vibecoded er een.

Wat Is Het?

ClickHouse Query Analyzer is een single-binary web applicatie die verbindt met elke ClickHouse instance en je een fatsoenlijke debugging-werkplek geeft. Je start het, configureert het met je ClickHouse server, en krijgt flame graphs, thread-analyses, query fingerprints, een SQL editor met schema browser en een tabeloptimalisatie-tool die concrete DDL-aanbevelingen genereert.

Architectuurdiagram van de ClickHouse Query Analyzer die een browser verbindt met een ClickHouse instance via een enkele stateless binary
Stateless architectuur: de browser stuurt verbindingsparameters via X-CH-* headers. De Go binary bevraagt ClickHouse systeemtabellen en toont de analyse in de ingebedde React frontend.

Geen database om in te stellen. Geen config-bestanden. Geen state op de server. Verbindingsparameters worden per-request vanuit de browser meegestuurd, dus de backend blijft stateless.

Systeem dashboard met uptime, actieve queries, database groottes, top tabellen en systeemmetrics
Het systeem dashboard geeft een snel overzicht van de gezondheid van je ClickHouse instance

Query Analyse

De querylijst haalt data uit system.query_log met filters voor tijdsbereik, gebruiker, query-soort, minimale duur, geheugengebruik en full-text zoek. Klik op een query voor tijdreeks-grafieken van RAM, CPU en I/O, een uitsplitsing van ProfileEvents, per-thread rol-inferentie (welke threads bezig zijn met aggregatie vs. scannen vs. I/O) en geheugenallocatie-details.

Query detail weergave met RAM/CPU/IO grafieken, ProfileEvents en thread-analyse
Duik in individuele queries met tijdreeks-metrics en thread-level analyse

Dit is de weergave die ik steeds miste: zien wat een query écht deed, niet alleen dat het 12 seconden duurde.

Flame Graphs en EXPLAIN

De analyzer bouwt canvas-gebaseerde flame graphs vanuit system.trace_log, met ondersteuning voor vijf trace-types: CPU, Real, Memory, MemorySample en MemoryPeak. Je krijgt het standaard zoom-in-hover-gedrag, zodat je snel kunt vinden waar de tijd aan wordt besteed.

Naast flame graphs is er een interactieve EXPLAIN tree view die het uitvoeringsplan weergeeft als een inklapbare boomstructuur, plus ruwe pipeline en syntax weergaven voor het complete beeld.

Query Fingerprints

Query fingerprints groeperen queries op normalized_query_hash: dezelfde query-structuur, verschillende parameterwaarden. Dit laat je geaggregeerde statistieken per fingerprint zien: aantal, gemiddelde, P50, P95 latency, geheugengebruik en I/O. Drill in op een fingerprint om prestatietrends over tijd te zien op uur- of dagbasis.

Query fingerprints weergave met gegroepeerde queries en geaggregeerde prestatiestatistieken
Ontdek patronen in herhaalde queries met fingerprint-groepering en trend-analyse

Dit is handig om langzame prestatieverslechtering op te sporen die je nooit zou opmerken als je naar individuele queries kijkt.

SQL Editor

Een volledige CodeMirror 6 editor met een schema browser sidebar die databases, tabellen en kolommen met types toont. Het ondersteunt geparametriseerde queries via een {{param_name}} syntax die automatisch invoervelden genereert. Resultaten linken direct naar de analyse-weergave. Voer een query uit en spring meteen naar de profiling.

SQL editor met CodeMirror, schema browser sidebar en geparametriseerde query-ondersteuning
Schrijf queries met schema browsing en spring direct naar analyse

Tabeloptimalisatie

Dit is de feature die zelfs mij verraste in hoe nuttig het bleek te zijn. Wijs de optimizer naar een tabel, een database of alle databases, en hij samplet kolomdata om concrete ALTER TABLE aanbevelingen te genereren:

  • LowCardinality wrapping voor string-kolommen met lage kardinaliteitsratio’s
  • Integer right-sizing: Int32 voorstellen in plaats van Int64 als de data past
  • Nullable verwijdering voor kolommen die nul nulls bevatten in de sample
  • Codec suggesties: DoubleDelta voor sequentiële timestamps, ZSTD voor hoge-kardinaliteit strings
  • Partitionerings- en skipping index aanbevelingen
  • Gezondheidscontroles: te veel parts, hoge bytes-per-row ratio

Elke aanbeveling komt met een severity-niveau, confidence-rating en kopieerbare DDL.

Tabeloptimalisatie met aanbevelingen, severity, confidence en DDL-statements
Krijg actiebare optimalisatie-aanbevelingen met kopieerbare ALTER TABLE statements

Probeer Het

De analyzer is open source en beschikbaar als single binary of Docker image. Geen setup-wizard, geen config-bestand. Gewoon verbinden en beginnen met debuggen.

docker run -p 8080:8080 ghcr.io/nimbleflux/clickhouse-query-analyzer:latest

Open vervolgens http://localhost:8080, vul je ClickHouse verbindingsgegevens in en je bent klaar.

  • GitHub: Broncode, releases en documentatie