Orden por cardinalidad (de menor a mayor)
La granularidad temporal importa
runnable editable
Céntrate en las consultas individuales, no en los promedios
Memoria y escaneo de filas
GROUP BY user_id, error_message, url_path crea un estado de memoria independiente para cada combinación única de esos tres valores. Con una mayor carga de usuarios, tipos de error y rutas URL, podría generar fácilmente millones de estados de agregación que deben mantenerse en memoria simultáneamente.
Para casos extremos, Sentry usa muestreo determinístico. Una muestra del 10 % reduce el uso de memoria en un 90 % y mantiene aproximadamente un 5 % de precisión en la mayoría de las agregaciones:
cityHash64() produce valores hash consistentes para la misma entrada, de modo que user_id = 12345 siempre dará el mismo hash, lo que garantiza que ese usuario siempre aparezca en tu muestra del 10 % o no aparezca nunca; sin fluctuaciones entre consultas.
Optimización de máscaras de bits de Sentry
Videos
- Perdido en el pajar: optimización de agregaciones de alta cardinalidad - Lecciones de Sentry en producción sobre la optimización del uso de memoria
- Análisis de rendimiento de ClickHouse - Alexey Milovidov sobre metodología de depuración
- Meetup de ClickHouse: técnicas de optimización de consultas - Estrategias de optimización de la comunidad