Упорядочивайте по мощности (от меньшей к большей)
Важна гранулярность времени
runnable editable
Сосредоточьтесь на отдельных запросах, а не на средних значениях
Память и сканирование строк
GROUP BY user_id, error_message, url_path создает отдельное состояние в памяти для каждой уникальной комбинации всех трех значений. При большом числе пользователей, типов ошибок и URL-путей можно легко получить миллионы состояний агрегации, которые должны одновременно храниться в памяти.
В крайних случаях Sentry использует детерминированное сэмплирование. Выборка в 10% снижает использование памяти на 90%, сохраняя при этом примерно 5% точности для большинства агрегаций:
cityHash64() выдает одинаковые хеш-значения для одного и того же входного значения, поэтому user_id = 12345 всегда будет хешироваться в одно и то же значение. Это гарантирует, что этот пользователь либо всегда попадает в вашу 10%-ную выборку, либо не попадает в нее никогда — без «мерцания» между запросами.
Оптимизация битовых масок в Sentry
Источники видео
- Как не потеряться в стоге сена — оптимизация агрегаций высокой мощности - уроки Sentry из продакшена по оптимизации памяти
- Анализ производительности ClickHouse - Алексей Миловидов о методологии отладки
- Митап ClickHouse: методы оптимизации запросов - подходы сообщества к оптимизации