
Комментарии 5
Спасибо за пост!
Попробую использовать, когда запрос не отрабатывает в разумное время
Спасибо за статью!
Подскажите, а вы сравнивали производительность обычным запросом к СУБД или через clickhouse-benchmark в клиенте или сбрасывая кеши между запросами?
Если обычный запрос (судя по статье), то мне кажется, что для чистоты эксперимента лучше создавать отдельные эквивалентные таблицы, иначе клик что-то может закешировать и т.д. и как пример читать из ram а не с диска, и последующие запросы к схожим сущностям или к одним и тем же файлам могут выполняться быстрее - в итоге можно получить некорректную оценку по времени и ресурсам.
Это правильный вопрос. Но сбрасывая кеши тоже получаешь результат отличный от того, что будет в продакшене, так как там кеши есть. Тот же Mark Cache если сбросить, то это будет ситуация, не имеющая отношения к реальности. Page cache тоже в реальности должен хоть как-то работать. Поэтому я не фанат тестов со сбросом кеша. Query cache, конечно, не использовался :-).
Тесты проводились в clickhouse-client локально на машине с clickhouse. Обычно я сначала делаю запросы, не имеющие отношения к тесту, потом тестовые. Затем повторно тестовые + в обратном порядке, чтобы убедиться, что время особо не меняется. Не слишком строгий подход, но мне этого достаточно, когда я вижу, что время сильно не скачет. Вообще статья больше про память, а скорость - это бонус (могло быть и медленнее, но статья всё равно бы была).
Сейчас посмотрел в логах OpenedFileCacheHits и OpenedFileCacheMisses по тестовым запросам - там 50/50 было примерно.
Про разные таблицы - как вариант, но что-то мне интуитивно не нравится. Как минимум те же кеши получаются раздельные и на более "легких" тестах заполняемость может быть лучше, что даст дополнительное преимущество. Разные парты будут, а если до одного схлопнуть, тоже обычно не реальная ситуация. Но это не слишком сильные аргументы с моей стороны.
В любом случае я специально сделал воспроизводимые тесты, чтобы желающие могли повторить. Если в каких-то условиях оно будет давать качественно иной результат, можно обсудить.
Моя любимая функция в ClickHouse, или оптимизируем вообще всё с помощью cityHash64()