CLCK 06: Настройка квот

Описание:

Итак, сегодня мы поговорим про квоты в кликхаусе - в отличие от профилей в read write режиме они позволяют ограничивать потребление ресурсов пользователями за определенный промежуток времени. По сути они позволяют сказать какое кол-во ресурсов может быть использовано пользователем. Задаются они в конфиг файле users.xml. Пример конфигурации квот вы можете увидеть ниже:

<yandex>
<quotas>
 <default>
 <interval>
 <duration>3600</duration>
 <queries>0</queries>
 <errors>0</errors>
 <result_rows>0</result_rows>
 <read_rows>0</read_rows>
 <execution_time>0</execution_time>
 </interval>
 </default>
<test>
<interval>
 <duration>120</duration>
 <queries>3</queries>
 <errors>2</errors>
 <result_rows>10000</result_rows>
 <read_rows>100000000000</read_rows>
 <execution_time>900</execution_time>
 </interval>
<interval>
 <duration>86400</duration>
 <queries>1000</queries>
 <errors>100</errors>
 <result_rows>1000000000</result_rows>
 <read_rows>100000000000</read_rows>
 <execution_time>10000</execution_time>
 </interval>
</test>
</quotas>
</yandex>

Мы создали отдельную квоту test, которую можем использовать в настройках пользователей. Квота может содержать в себе любое множество интервалов времени (<interval>), каждый из которых имеет свою конфигурацию. Некоторые значения параметров в примере равны 0, в таком случае на данный параметр не накладываются никакие квоты.

Время (в секундах), через которое будут сброшены все значения счетчиков интервала.

Общее количество запросов.

Количество запросов, которые при выполнении выдали ошибку.

<result_rows>

Количество строк, которые были отданы при выполнении запросов.

<read_rows>

Количество строк, которые доступны для чтения при выполнении запросов.

<execution_time>

Суммарное время выполнения всех запросов.

При достижении лимита по любому интервалу будет отображаться информация о том, какое значение превышено и когда начнется следующий интервал.

Также просмотреть на значения квот в реальном времени можно в таких системных таблицах, как system.quotas, system.quotas_usage, system.quota_limits.

Стоить заметить, что при распределенном запросе все значения квот подсчитываются только на сервере, который инициировал запрос. На каждом сервере ClickHouse счетчики квот для пользователей отдельные. Также счетчики сбрасываются при каждом перезапуске сервера.

Давайте попробуем повторить эксперимент с пользователем test, указав ему данную квоту в конфигурации, а так же сменив его профиль на default - чтобы он не запрещал менять нам настройки профилей:

ch1.ru-central1.internal :) select * from logs.data;
0 rows in set. Elapsed: 0.002 sec.
Received exception from server (version 21.2.5):
Code: 201. DB::Exception: Received from localhost:9000. DB::Exception: Quota for user `test` for 120s has been exceeded: queries = 4/3. Interval will end at 2021-03-09 15:42:00. Name of quota template: `test`.

В данном случае мы пытались быстро выполнить несколько запросов и превысили квоту максимального количества запросов для пользователя. И кликхаус сообщил нам, что мы можем повторить наш запрос через 120 секунд.

Таким образом вы можете установить лимиты по использованию ресурсов для различных пользователей на основе квот.

Полезные ссылки:

Задание. Правила:

  1. После нажатия кнопки «Начать выполнение» для вас будет подготовлено окружение и предоставлены необходимые доступы.
  2. Также вам будут выданы переменные (если они будут нужны), которые в задании указаны в фигурных скобках, — их надо будет подставить при выполнении задания.
  3. После выполнения всех пунктов задания нажмите кнопку «Отправить на проверку», и в течение ближайших 3-5 минут скрипт проверит выполнение всех условий и выставит вам оценку.
  4. В случае, если вы что-то забыли, можно исправить ошибки и отправить на проверку повторно.
  5. Также, если вы успешно сдали задание, но у вас остались вопросы — вы всегда сможете задать их куратору после проверки или в чате в любое удобное для вас время.

Задание:

  1. Установите clickhouse на сервер из официальных репозиториев.
  2. Все изменения ниже проводите в основном пользовательском файле users.xml
  3. Создайте новую квоту под названием user.
  4. Создайте интервал длительностью в 1 час (указывать надо в секундах).
  5. Ограничьте количество запросов до 100.
  6. Ограничьте максимальное количество прочитаных строк до 10000000.
  7. Все остальные параметры оставьте без ограничений.
  8. Отправляйте задание на проверку.