Настройка продвинутых параметров
В этом разделе описано, как работать с продвинутыми настройками клики. В веб-интерфейсе они находятся в разделе Advanced settings. Полный список продвинутых настроек приведён в разделе Продвинутые настройки.
Важно
Настройки, которые упомянуты в разделе, предназначены только для продвинутых пользователей. Если вы не уверены, что они вам нужны, рекомендуется оставить значения по умолчанию.
Продвинутые настройки включают в себя:
- конфигурирование запросов в рамках клики — блок Query settings;
- конфигурирование серверных настроек — блок ClickHouse config;
- конфигурирование YT‑части инстансов — блок YT config;
- выделение памяти — блок Instance memory;
- кеширование запросов — блок Sticky query distribution.
Query settings
Параметры из раздела Query settings — это подмножество настроек сессии ClickHouse, которые будут применены для всех запросов в рамках клики.
Чтобы изменить поведение запроса, переопределите значения параметров по умолчанию с помощью:
-
В документации ClickHouse найдите нужные настройки и скопируйте их названия.
-
Откройте интерфейс клики, как описано в разделе Как перейти в интерфейс клики.
-
Нажмите кнопку
в блоке Кнопки действий или Edit speclet на вкладке Speclet на Панели вкладок. -
Выберите слева раздел Advanced.
-
Найдите раздел Query settings.
-
В поле Use JSON syntax введите параметры и их значения в JSON-синтаксисе, в виде пар
ключ: значение, заключённых в фигурные скобки{ }. Например:{ "max_execution_time": 200000, "max_insert_threads": 32, "max_threads": 32, "parallel_distributed_insert_select": 2 } -
Чтобы применить изменения, нажмите кнопку Confirm.
-
Установите CHYT CLI в составе пакета
ytsaurus-client, если вы этого ещё не сделали. -
Сохраните адрес прокси в переменную окружения. Это нужно, чтобы не указывать кластер YTsaurus в каждой команде через аргумент
--proxy.export YT_PROXY=<cluster_name> -
Задайте переменную окружения с адресом контроллера:
export CHYT_CTL_ADDRESS=<address>, где
<address>— адрес контроллера. Например, для демо-кластера адрес имеет вид:https://strawberry-XXXXXXXX.demo.ytsaurus.tech.
Адрес контроллера можно получить из поляcontrollerиз результата выполнения командыyt get //sys/strawberry/chyt/<alias>/@strawberry_info_state -
Сохраните в переменную окружения имя кластера:
export CLUSTER_NAME=<cluster_name>, где
<cluster_name>— имя кластера. Например, имя демо-кластера:ytdemo. -
В документации ClickHouse найдите нужные настройки и скопируйте их названия.
-
Установите нужные параметры с помощью опции
query_settings. Например:yt clickhouse ctl set-option query_settings "{\"max_execution_time\": 200000,\"max_insert_threads\": 32,\"max_threads\": 32,\"parallel_distributed_insert_select\": 2}"
ClickHouse config
Для управления конфигурацией ClickHouse-части предназначена настройка Clickhouse config. Задайте её так, чтобы она соответствовала стандартной XML-конфигурации ClickHouse.
Правила преобразования XML-конфигурации ClickHouse в YSON-конфигурацию CHYT можно описать следующим образом:
- Любой не множественный по смыслу в конфигурации ClickHouse узел конфигурации является словарём (
map). - Множественный узел представлен списком (
list).
Пример преобразования искусственной XML-конфигурации в YSON-конфигурацию
|
XML |
YSON |
|
|
Опции конфига ClickHouse, которые могут оказаться удобны в CHYT
Основная опция — это dictionaries — конфигурация внешних словарей. Значением должен быть список конфигураций словарей.
Каждый словарь конфигурируется map'ом со следующими полями, сохраняющими смысл оригинальной конфигурации ClickHouse:
name— имя внешнего словаря;source— источник данных для внешнего словаря;layout— представление внешнего словаря в памяти инстанса;structure— схема данных, хранящихся в словаре;lifetime— время жизни словаря.
Остальные опции можно найти в конфиге ClickHouse в репозитории.
Примечание
Конфиг ClickHouse также имеет опцию settings, в которой содержатся настройки, описанные в разделе Query settings. Таким образом, настройки запроса также могут быть определены внутри конфига ClickHouse.
Как изменить конфигурацию ClickHouse
-
Откройте интерфейс клики, как описано в разделе Как перейти в интерфейс клики.
-
Нажмите кнопку
в блоке Кнопки действий или Edit speclet на вкладке Speclet на Панели вкладок. -
Выберите слева раздел Advanced.
-
Найдите раздел Clickhouse config.
-
В поле Use JSON syntax введите параметры и их значения в виде JSON конфигурации.
Пример конфигурации простого словаря и установки Query settings вsettingsчасти:{ "settings": { "max_execution_time": 30 }, "dictionaries": [ { "name": "dict", "layout": {"flat": {}}, "structure": { "id": {"name": "key"}, "attribute": [ {"name": "value_str", "type": "String", "null_value": "n/a"}, {"name": "value_i64", "type": "Int64", "null_value": 42} ] }, "lifetime": 0, "source": {"yt": {"path": "//home/user/table"}} } ] } -
Чтобы применить изменения, нажмите кнопку Confirm.
-
Установите CHYT CLI в составе пакета
ytsaurus-client, если вы этого ещё не сделали. -
Сохраните адрес прокси в переменную окружения. Это нужно, чтобы не указывать кластер YTsaurus в каждой команде через аргумент
--proxy.export YT_PROXY=<cluster_name> -
Задайте переменную окружения с адресом контроллера:
export CHYT_CTL_ADDRESS=<address>, где
<address>— адрес контроллера. Например, для демо-кластера адрес имеет вид:https://strawberry-XXXXXXXX.demo.ytsaurus.tech.
Адрес контроллера можно получить из поляcontrollerиз результата выполнения командыyt get //sys/strawberry/chyt/<alias>/@strawberry_info_state -
Сохраните в переменную окружения имя кластера:
export CLUSTER_NAME=<cluster_name>, где
<cluster_name>— имя кластера. Например, имя демо-кластера:ytdemo. -
Найдите в списке настроек ClickHouse нужные параметры и скопируйте их названия.
-
Установите нужные параметры с помощью опции
clickhouse_config. Например:yt clickhouse ctl set-option clickhouse_config "{ ... some JSON params}"
YT config
YT-часть конфигурации инстанса задаётся в опции yt_config. Через эту опцию можно задать продвинутые настройки, которые не вынесены в отдельные опции спеклета.
Вы можете посмотреть список доступных параметров YT-конфигурации в разделе Конфигурация инстанса.
Как изменить конфигурацию YT
-
Откройте интерфейс клики, как описано в разделе Как перейти в интерфейс клики.
-
Нажмите кнопку
в блоке Кнопки действий или Edit speclet на вкладке Speclet на Панели вкладок. -
Выберите слева раздел Advanced.
-
Найдите раздел YT config.
-
В поле Use JSON syntax введите параметры и их значения в виде JSON конфигурации, например:
{ "subquery": { "max_data_weight_per_subquery": 12942417591810 } } -
Чтобы применить изменения, нажмите кнопку Confirm.
-
Установите CHYT CLI в составе пакета
ytsaurus-client, если вы этого ещё не сделали. -
Сохраните адрес прокси в переменную окружения. Это нужно, чтобы не указывать кластер YTsaurus в каждой команде через аргумент
--proxy.export YT_PROXY=<cluster_name> -
Задайте переменную окружения с адресом контроллера:
export CHYT_CTL_ADDRESS=<address>, где
<address>— адрес контроллера. Например, для демо-кластера адрес имеет вид:https://strawberry-XXXXXXXX.demo.ytsaurus.tech.
Адрес контроллера можно получить из поляcontrollerиз результата выполнения командыyt get //sys/strawberry/chyt/<alias>/@strawberry_info_state -
Сохраните в переменную окружения имя кластера:
export CLUSTER_NAME=<cluster_name>, где
<cluster_name>— имя кластера. Например, имя демо-кластера:ytdemo. -
Установите нужные параметры с помощью опции
yt_config. Например:yt clickhouse ctl set-option yt_config "{\"subquery\":{\"max_data_weight_per_subquery\": 12942417591810}}"
Instance memory
Для точной настройки распределения памяти полезно понять схему выделения памяти в инстансе CHYT, разобраться, какие параметры отвечают за каждый объём и как их изменять.
Примечание
В терминах работы с памятью:
- вотермарк (Watermark) — объём памяти, который отмеряется от верхней границы выделенного лимита памяти и при попадании в который инстанс CHYT инициирует завершение по одному из заложенных сценариев;
- окно (window) — это временной интервал (по умолчанию 15 минут), в течение которого вычисляется среднее значение превышений нижней границы вотермарка. Это помогает не учитывать случайные скачки памяти;
- RSS (Resident Set Size) — фактический объём используемой оперативной памяти процесса;
- OOM (out of memory) — переполнение памяти.
Распределение памяти в инстансе CHYT
На схеме показано, как распределяется память внутри инстанса CHYT: из каких объёмов складывается общий лимит и какие пороги определяют поведение системы при нехватке памяти.

Ниже описан каждый параметр схемы — объёмы памяти, которые входят в общий лимит инстанса, и пороги:
-
MaxServerMemoryUsage— общий лимит на используемую память в рамках инстанса CHYT, суммарный объём, который включает:-
Reader— объём памяти, который выделяется под кеши ридеров для предварительной загрузки и ускорения чтения данных; -
Caches— условное обозначение на схеме объёма памяти под кеши, в который входят:CompressedBlockCache— кеш сжатых блоков данных. Вмещает большие объёмы, поскольку данные хранятся в сжатом виде (поведение по умолчанию), но требует время на повторную распаковку. Используется при перечитывании больших блоков данных;UncompressedBlockCache— кеш для несжатых блоков данных. Полезен при большом количестве последовательных запросов к одним и тем же данным, потому что экономит ресурсы не только на чтении, но и на распаковке данных;ChunkMetaCache— кеш метаданных чанков. Чтение метаданных чанка предшествует любой операции чтения. Полезно при повторном чтении данных, позволяет экономить ресурсы на получении одних и тех же метаданных;
-
CH Memory— специальный объём памяти, зарезервированный для внутренних нужд ClickHouse; -
Footprint— специальный резервный «запас» памяти, который нужен, чтобы процесс мог превысить пороги и суммарно не вызвать превышение критических значений;
-
-
MemoryLimit— условная жёсткая граница на RSS (потребление памяти) инстанса CHYT, которая используется для категорийWatchdogOomWatermarkиWatchdogOomWindowWatermark; -
WatchdogOomWatermark— некоторый добавочный объём памяти, используется в проверках, не случился ли OOM: сумма текущего значения RSS иWatchdogOomWatermarkсравнивается с заданнымMemoryLimit; -
WatchdogOomWindowWatermark— некоторый добавочный объём памяти, используется в проверках, не случился ли OOM. Проверка выполняется по следующему алгоритму:- вычисляется среднее значение RSS во временном окне
Window(15 минут по умолчанию); - к рассчитанному значению добавляется
WatchdogOomWindowWatermark; - сумма сравнивается с заданным
MemoryLimit.
- вычисляется среднее значение RSS во временном окне
-
ClickHouseWatermark— добавочный объём памяти, чтобы отделитьMaxServerMemoryUsageот общегоMemoryLimit.
Критические области значений RSS (потребления памяти)
На шкале RSS на схеме распределения памяти цифрами отмечены критические области значений, при достижении которых система прерывает процесс.

Если объём физической оперативной памяти процесса достигает интервала:
1(среднее значение RSS в течение более 15 минут превышает нижнюю границу интервалаWatchdogOomWindowWatermark) — инстанс выполняет плавное завершение работы (graceful shutdown): прекращает принимать новые запросы, ждёт завершения активных и выключается;2(среднее значение RSS превышает нижнюю границу порогаClickHouseWatermark) — ClickHouse прекращает выделение памяти под любые операции, система сообщает о нехватке памяти;3(RSS превышает нижнюю границу интервалаWatchdogOomWatermark) — инстанс резко прекращает работу, активные запросы завершаются ошибкой;4(RSS превышаетMemoryLimit) — YTsaurus удаляет инстанс.
Как задать пороги памяти
Рекомендуем использовать веб-интерфейс:
-
Откройте интерфейс клики, как описано в разделе Как перейти в интерфейс клики.
-
Нажмите кнопку
в блоке Кнопки действий или Edit speclet на вкладке Speclet на Панели вкладок. -
Выберите слева раздел Advanced.
-
Найдите раздел Instance memory.
-
В поле Use JSON syntax введите параметры и их значения в виде JSON конфигурации. В качестве шаблона можно использовать пример конфигурации:
{ "clickhouse": 10500000000, "chunk_meta_cache": 100000000, "compressed_cache": 4000000000, "uncompressed_cache": null, "reader": 500000000, "clickhouse_watermark": 10, "watchdog_oom_watermark": 0, "watchdog_oom_window_watermark": 0, "footprint": 2000000000 } -
Чтобы применить изменения, нажмите кнопку Confirm.
Sticky query distribution
Продвинутые опции Enable sticky query distribution и Query sticky group size управляют распределением запросов по инстансам с учётом кеширования.
Если запросы повторяются с заданной периодичностью, полезно кешировать их результаты. Кеш запроса сохраняется на том инстансе, на котором он выполнился.
По умолчанию запросы распределяются по инстансам в случайном порядке. Чтобы перенаправить запросы на инстансы, где они выполнялись ранее и где хранится их кеш, используют настройки:
- Enable sticky query distribution — опция включает распределение запросов по инстансам с учётом хешей этих запросов;
- Query sticky group size — опция задаёт размер группы инстансов, выбранных детерминированно по хешу запроса. Среди этих инстансов будет равномерно выбран координатор для исполнения запроса. Имеет смысл только при включённой опции Enable sticky query distribution.
Как включить перенаправление запросов на инстансы с кешем
Рекомендуем использовать веб-интерфейс:
- Откройте интерфейс клики, как описано в разделе Как перейти в интерфейс клики.
- Нажмите кнопку
в блоке Кнопки действий или Edit speclet на вкладке Speclet на Панели вкладок. - Выберите слева раздел Advanced.
- Найдите опцию Enable sticky query distribution и включите её.
- Найдите опцию Query sticky group size и в поле введите число — размер группы инстансов. Запрос будет случайно направлен координатором на один из инстансов группы.
- Чтобы применить изменения, нажмите кнопку Confirm.