Как ускорить ClickHouse?
Обсуждали с одним де перформанс систем и связку Trino + ClickHouse. Моя первая мысль - серьезно? КХ и так быстрый, куда еще к нему Trino накручивать?? Моя вторая мысль - тестим! Дисклеймер - мои тесты не претендуют на супер истину, но дают определенное представление
💻 Я взяла ноут, подняла кх с 1 нодой и трино с кх каталогом. Создала тестовые таблички с 1к, 10к, 100к, 1млн, 10млн строк. Больше уже не отрабатывало
Придумала такой запрос:
with cte as ( select id, concat(cast(id, 'String'), '_', cast(id, 'String')), sum(id), row_number() over (order by id) as rn from test.tbl1000 group by 1, 2 ) select * from cte where rn in (14, 49) order by rn desc
Тут есть работа со строками, агрегация, оконка и т.д. - поэтому тестим в какой-то мере тяжелую операцию
Запрос я запустила по 50 раз на каждом размере данных для кх и трино. Потом так же погоняла insert моей cte в таблицу
Изначально сходила в system.query_log и посчитала длительность, строки, байты, память в среднем по всем запускам. Потом поняла, что для трино они будут отражать только кусок работы в кх, поэтому сравнение будет некорректным
По итогу решила сравнить время: query_duration_ms vs elapsedTime
Какие выводы я могу сделать:
1. Трино поверх КХ проигрывает КХ. Так получилось при моих данных и в моих условиях. Хотя есть мнение, что на большом объеме данных он работает быстрее бд (~100гб)
2. При insert трино проигрывает еще значительнее, потому что сначала пишет данные во временную таблицу, потом перекладывает в основную:
INSERT INTO "test"."result1000" ("id", "str", "sum", "rn") SELECT "id", "str", "sum", "rn" FROM "test"."tmp_trino_c5cb30af" temp_table
3. В query_log по Трино не собирается часть метрик: user_aggregate_functions, used_functions, used_data_type_families. А также отличаются result_rows, query. Если это важно для мониторинга, то использовать не получится
4. Я также хотела отделить разные тесты комментами, чтобы потом удобнее искать в query_log:
SETTINGS log_comment = 'test'
Но в трино нет такого функционала, так что многие необходимые кликхаусные штучки просто не будут работать
@data_engineerette