Что обеспечивает высокий параллелизм
Быстрые отдельные запросы — основа высокого QPS. Чем меньше работы выполняет каждый запрос, тем больше запросов сервер может выполнять одновременно. Основные возможности, сокращающие объём работы на каждый запрос:- Разреженный первичный индекс таблиц семейства MergeTree, позволяющий пропускать чтение данных, не соответствующих запросу.
- Кэши, например кэш запросов, который возвращает результаты повторяющихся запросов
SELECTнепосредственно из кэша. - Проекции, которые предварительно вычисляют данные при вставке и могут автоматически выбираться ClickHouse, а также materialized views, которые хранят предварительно вычисленные результаты в отдельной целевой таблице, к которой запросы могут обращаться напрямую.
Управление и ограничение параллелизма
По умолчанию ClickHouse OSS не ограничивает число одновременно выполняемых запросов. В ClickHouse Cloud дляmax_concurrent_queries_for_all_users по умолчанию задано значение 1000. Ограничения можно настроить на нескольких уровнях:
max_concurrent_queriesограничивает общее число одновременно выполняемых запросов на сервере.max_concurrent_insert_queriesиmax_concurrent_select_queriesотдельно задают такое же ограничение для запросовINSERTиSELECT. Для всех трёх по умолчанию задано значение0(без ограничений).max_concurrent_queries_for_userиmax_concurrent_queries_for_all_usersограничивают параллелизм для каждого пользователя или для всех пользователей.
Изоляция рабочих нагрузок
Чтобы параллельно выполняющиеся рабочие нагрузки не мешали друг другу, ClickHouse предоставляет:- Планирование рабочих нагрузок для управления распределением CPU, памяти и IO между рабочими нагрузками.
- Квоты для ограничения потребления ресурсов каждым пользователем за определённый интервал времени.
- Ограничения на сложность запросов для защиты от отдельных запросов, чрезмерно потребляющих ресурсы.
- Встроенное ролевое управление доступом для определения запросов, доступных каждому пользователю.