Перейти к основному содержанию
Квоты в ClickHouse CloudКвоты поддерживаются в ClickHouse Cloud, но их нужно создавать с помощью синтаксиса DDL. Описанный ниже подход с XML-конфигурацией не поддерживается.
Квоты позволяют ограничивать использование ресурсов за определённый период времени или отслеживать их использование. Квоты задаются в пользовательской конфигурации, обычно в файле ‘users.xml’. В системе также есть возможность ограничивать сложность отдельного запроса. См. раздел Ограничения на сложность запросов. В отличие от ограничений на сложность запроса, квоты:
  • Ограничивают набор запросов, которые можно выполнять в течение заданного периода времени, вместо того чтобы ограничивать отдельный запрос.
  • Учитывают ресурсы, затраченные на всех удалённых серверах при распределённой обработке запросов.
Рассмотрим раздел файла ‘users.xml’, в котором задаются квоты.
По умолчанию квота отслеживает потребление ресурсов за каждый час, не ограничивая их использование. Потребление ресурсов, рассчитанное для каждого периода, выводится в журнал сервера после каждого запроса.
Для квоты ‘statbox’ ограничения задаются на каждый час и на каждые 24 часа (86 400 секунд). Временной интервал отсчитывается от фиксированного момента времени, определяемого реализацией. Иными словами, 24-часовой интервал не обязательно начинается в полночь. Когда интервал заканчивается, все накопленные значения сбрасываются. Для следующего часа расчёт квоты начинается заново. Вот какие величины можно ограничивать: queries – Общее количество запросов. query_selects – Общее количество запросов SELECT. query_inserts – Общее количество запросов на вставку. errors – Количество запросов, вызвавших исключение. result_rows – Общее количество строк, возвращённых в результате. result_bytes - Общий размер строк, возвращённых в результате. read_rows – Общее количество исходных строк, прочитанных из таблиц для выполнения запроса на всех удалённых серверах. read_bytes - Общий объём данных, прочитанных из таблиц для выполнения запроса на всех удалённых серверах. written_bytes - Общий объём записанных данных. execution_time – Общее время выполнения запроса в секундах (реальное время). failed_sequential_authentications - Общее количество последовательных ошибок аутентификации. queries_per_normalized_hash – Максимальное число выполнений любого нормализованного запроса. Нормализованные запросы — это запросы, в которых литералы заменены плейсхолдерами, поэтому SELECT 1 и SELECT 2 считаются одним и тем же нормализованным запросом. Этот лимит отслеживается независимо для каждого отдельного нормализованного шаблона запроса. Если лимит превышен хотя бы в одном временном интервале, генерируется исключение с сообщением о том, какое ограничение было превышено, для какого интервала и когда начинается новый интервал (то есть когда запросы снова можно будет отправлять). Квоты могут использовать возможность “quota key”, чтобы независимо учитывать ресурсы для нескольких ключей. Вот пример:
Вы также можете задавать квоты по нормализованному хешу запроса, чтобы для каждого отдельного шаблона запроса создавался собственный независимый бакет квоты. В XML-конфигурации это записывается как <keyed_by_normalized_query_hash />:
То же самое можно записать в синтаксисе DDL:
В этом примере пользователь может выполнять до 100 запросов каждого уникального нормализованного вида в час. SELECT number FROM numbers(1) и SELECT number FROM numbers(2) используют один и тот же бакет (поскольку у них одинаковая нормализованная форма), а SELECT number, number FROM numbers(1) использует отдельный бакет. Квота назначается пользователям в разделе ‘users’ конфигурации. См. раздел “Права доступа”. При распределённой обработке запросов накопленные значения хранятся на сервере, отправившем запрос. Поэтому, если пользователь переключится на другой сервер, квота там “начнёт отсчёт заново”. При перезапуске сервера квоты сбрасываются.
Последнее изменение 25 июня 2026 г.