Определение приоритета для каждого запроса на чтение: выполнение некоторых запросов в фоновом режиме
Моя проблема заключается в следующем: я запускаю кластер clickhouse для веб-интерфейса с низкой задержкой, выполняя классические запросы OLAP, такие как SELECT ... WHERE... GROUP BY ...
Большинство этих запросов очень быстрые от 10 мс до 1 с, и это прекрасно.
Тем не менее, я также хочу использовать clickhouse для более тяжелых запросов, например, с использованием строковых измерений (например, URL) или более медленных функций, таких как SELECT DISTINCT(COUNT(...)), или просто с очень большим периметром (все строки).
Моя цель не в том, чтобы сделать эти запросы быстрее, а во избежание того, чтобы они замедляли другие запросы, используя все ресурсы кластера.
Я могу представить базовый метод планирования, как это:
- начать тяжелый запрос с полными ресурсами
- каждый раз, когда приходит легкий запрос, приостановите тяжелый и завершите легкий, затем продолжите тяжелый с полной мощностью
Или любой другой более мягкий приоритетный метод.
Есть ли в Clickhouse что-то, способное определить такие приоритеты?
1 ответ
Есть такая особенность (к сожалению, пока не документированная):
:) select * from system.settings where name like '%priority%';
SELECT *
FROM system.settings
WHERE name LIKE '%priority%'
┌─name─────┬─value─┬─changed─┬─description───────────────────────────────────────────────────────────────────────────────────────┐
│ priority │ 0 │ 0 │ Priority of the query. 1 - the highest, higher value - lower priority; 0 - do not use priorities. │
└──────────┴───────┴─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.002 sec.