Определение приоритета для каждого запроса на чтение: выполнение некоторых запросов в фоновом режиме

Моя проблема заключается в следующем: я запускаю кластер 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.
Другие вопросы по тегам