Workload Scheduling: управление ресурсами
В multi-tenant ClickHouse разные типы запросов конкурируют за общие ресурсы — IO и CPU. Без управления ETL-задачи, которые читают терабайты данных, легко вытесняют интерактивные запросы дашборда. Workload scheduling — механизм fair resource allocation: он распределяет IO и CPU между группами запросов согласно заданным приоритетам и весам.
XML-конфигурация для workload management устарела (deprecated). Используйте SQL DDL (CREATE RESOURCE / CREATE WORKLOAD). XML-конфиги не видны через SHOW RESOURCES / SHOW WORKLOADS и не поддерживают runtime-изменения без перезапуска сервера. Все примеры в этом уроке используют SQL DDL.
CREATE RESOURCE: объявление ресурсов
Ресурс (RESOURCE) — это физический ресурс сервера, доступом к которому управляет планировщик.
IO-ресурс
-- IO-ресурс: охватывает чтение и запись на все диски
CREATE RESOURCE all_io (READ ANY DISK, WRITE ANY DISK);
READ ANY DISK и WRITE ANY DISK означают, что планировщик контролирует все дисковые операции чтения и записи. Можно ограничить конкретным диском: READ DISK s3_cold.
CPU-ресурс (26.3 LTS / 25.8+)
-- CPU slot scheduling (доступно с версии 25.8)
CREATE RESOURCE cpu (MASTER THREAD, WORKER THREAD);
CPU slot scheduling управляет выделением CPU-потоков между workloads. MASTER THREAD — поток координации запроса, WORKER THREAD — рабочие потоки обработки данных.
CREATE WORKLOAD: иерархия групп
Workload (WORKLOAD) — именованная группа запросов с заданными параметрами доступа к ресурсам. Workloads организуются в дерево: корневой workload агрегирует ресурсы, дочерние делят их между собой.
Простая иерархия: interactive vs reporting
-- Корневой workload (без PARENT)
CREATE WORKLOAD all;
-- Интерактивные запросы: высокий приоритет, 80% ресурсов
CREATE WORKLOAD interactive
PARENT all
SETTINGS priority = 0, weight = 80;
-- Reporting-запросы: низкий приоритет, 20% ресурсов
CREATE WORKLOAD reporting
PARENT all
SETTINGS priority = 1, weight = 20;
Параметры SETTINGS
| Параметр | Значение | Описание |
|---|---|---|
priority | 0, 1, 2, … | Приоритет: 0 = наивысший. При конкуренции workload с меньшим priority получает ресурсы первым |
weight | 1..100 | Доля ресурсов при одновременной работе нескольких workloads одного приоритета |
Использование: маркировка запросов
Запрос назначается в workload через SET workload:
-- Маркировать сессию как interactive
SET workload = 'interactive';
SELECT count() FROM events WHERE event_type = 'purchase';
-- Маркировать сессию как reporting
SET workload = 'reporting';
SELECT user_id, sum(revenue) FROM orders GROUP BY user_id;
Настройку можно зафиксировать на уровне роли или пользователя:
-- ETL-пользователь всегда в reporting workload
ALTER USER etl_user SETTINGS workload = 'reporting';
Трёхуровневая иерархия: interactive / reporting / etl
Для production-систем рекомендуется трёхуровневая иерархия:
-- Ресурсы
CREATE RESOURCE all_io (READ ANY DISK, WRITE ANY DISK);
-- Workload-дерево
CREATE WORKLOAD all;
-- Интерактивные запросы (дашборды, ad-hoc)
CREATE WORKLOAD interactive
PARENT all
SETTINGS priority = 0, weight = 70;
-- Отчёты (batch, запускаются раз в час)
CREATE WORKLOAD reporting
PARENT all
SETTINGS priority = 1, weight = 20;
-- ETL (фоновая загрузка данных)
CREATE WORKLOAD etl
PARENT all
SETTINGS priority = 2, weight = 10;
При такой конфигурации ETL никогда не вытеснит интерактивные запросы: даже если ETL запускает 20 параллельных потоков загрузки, они получают только 10% ресурсов, пока есть активные интерактивные запросы.
Мониторинг
system.scheduler
-- Текущее состояние планировщика
SELECT *
FROM system.scheduler;
SHOW WORKLOADS и SHOW RESOURCES
-- Список workloads
SHOW WORKLOADS;
-- Список ресурсов
SHOW RESOURCES;
Ключевые выводы
CREATE RESOURCEобъявляет физический ресурс (IO или CPU) для управления планировщиком. XML-конфиг устарел: не виден черезSHOW RESOURCESи требует перезапуска сервера.CREATE WORKLOADзадаёт именованную группу сpriority(0 = наивысший) иweight(доля ресурсов). Workloads образуют дерево с корневымall.SET workload = 'name'маркирует запрос или сессию в конкретную группу. Можно зафиксировать на уровне пользователя черезALTER USER.priorityопределяет порядок доступа при конкуренции: workload с меньшим priority получает ресурсы первым.weightопределяет пропорции при одновременной работе равноприоритетных групп.- CPU slot scheduling (
MASTER THREAD, WORKER THREAD) доступен с версии 25.8 и позволяет управлять не только IO, но и CPU-потоками.