max_bytes_before_external_distinct
Порог использования памяти запросом в байтах, при достижении которого данныеDISTINCT сбрасываются на диск. Фактическое использование памяти может превышать
этот порог.
0 отключает этот порог. Если max_bytes_ratio_before_external_distinct также задаёт порог,
используется меньшее из значений. Установите для обеих настроек значение 0, чтобы отключить сброс данных на диск.
См. DISTINCT во внешней памяти.
max_bytes_before_external_group_by
Значение по умолчанию в Cloud: половина объема памяти для каждой реплики. Включает или отключает выполнение секцийGROUP BY с использованием внешней памяти.
(См. GROUP BY во внешней памяти)
Возможные значения:
- Максимальный объем оперативной памяти (в байтах), который может использовать одна операция GROUP BY.
0—GROUP BYс использованием внешней памяти отключен.
Если использование памяти во время операций GROUP BY превышает этот порог в байтах,
активируется режим «внешней агрегации» (сброс данных на диск).Рекомендуемое значение — половина доступной системной памяти.
max_bytes_before_external_join
Если задано ненулевое значение, hash JOIN будет автоматически преобразован в grace hash JOIN, что позволит сбрасывать данные на диск, когда объём данных правой части превысит этот порог в байтах. Вместе сmax_bytes_ratio_before_external_join это пороговый триггер сброса данных на диск для любого основанного на хешировании join_algorithm, включая grace_hash, который требует, чтобы одна из этих двух настроек была ненулевой. Как только ненулевой порог делает JOIN способным к сбросу данных на диск, enable_adaptive_memory_spill_scheduler может принудительно вызвать сброс данных на диск при нехватке памяти ещё до достижения порога; если обе настройки равны 0, JOIN никогда не сбрасывает данные на диск, поэтому планировщику нечего запускать. Исключение — legacy_join_size_limits_trigger_spilling: при включённой настройке автономный grace_hash игнорирует обе и сбрасывает данные на диск по max_rows_in_join / max_bytes_in_join. При значении 0 (по умолчанию) этот абсолютный порог в байтах отключён, однако автоматический сброс данных на диск всё равно может происходить через max_bytes_ratio_before_external_join (по умолчанию — 0.5); установите оба значения в 0, чтобы полностью отключить автоматический сброс данных на диск. Это предотвращает оптимизацию чтения по порядку через JOIN.
max_bytes_before_external_sort
Значение по умолчанию в Cloud: половина объёма памяти для каждой реплики. Включает или отключает выполнение секцийORDER BY во внешней памяти. См. Подробности реализации ORDER BY
Если использование памяти во время операции ORDER BY превышает этот порог в байтах, активируется режим «внешней сортировки» (сброс данных на диск).
Возможные значения:
- Максимальный объём оперативной памяти (в байтах), который может использовать одна операция ORDER BY. Рекомендуемое значение — половина доступной системной памяти
0—ORDER BYво внешней памяти отключён.
max_bytes_before_remerge_sort
При использовании ORDER BY с LIMIT, если использование памяти превышает указанный порог, перед окончательным слиянием выполняются дополнительные шаги по слиянию блоков, чтобы оставить только первые LIMIT строк.max_bytes_for_lazy_final
Максимальное количество байт в наборе для оптимизации отложенного FINAL. При превышении этого значения используется обычный FINAL.max_bytes_in_distinct
Максимальный размер состояния в памяти (в несжатых байтах), используемого хеш-таблицей при выполнении DISTINCT.max_bytes_in_join
Максимальный размер в байтах структуры данных правой части (обычно хеш-таблицы), используемой при JOIN таблиц. Этот параметр применяется к операциям SELECT … JOIN и движку таблицы Join. Если запрос содержит несколько JOIN, ClickHouse проверяет этот параметр для каждого промежуточного результата. Это жесткое ограничение для любогоjoin_algorithm на основе хеширования: при достижении лимита запрос генерирует исключение или прерывается в соответствии с join_overflow_mode.
Оно никогда не приводит к сбросу данных JOIN на диск — за это отвечают
max_bytes_before_external_join
и
max_bytes_ratio_before_external_join.
Поскольку это ограничение, а не триггер, установка его значения на уровне порога сброса данных на диск или ниже обычно приводит к сбою запроса еще до того, как JOIN сможет выполнить сброс данных на диск, — если только JOIN не поддерживает сброс данных на диск и enable_adaptive_memory_spill_scheduler не вызовет сброс данных на диск раньше, либо legacy_join_size_limits_trigger_spilling не превратит этот лимит обратно в триггер сброса данных на диск для той части JOIN, которая уже выполняется на диске.
Лимит учитывает содержимое хеш-таблиц, поэтому JOIN со сбросом данных на диск достигает его по мере загрузки каждого бакета, а не во время чтения правой части: он может прочитать больше данных правой части до остановки, чем хеш-JOIN, выполняемый в памяти.
Возможные значения:
- Положительное целое число.
- 0 — контроль памяти отключен.
max_bytes_in_set
Максимальное количество байтов (несжатых данных), используемых множеством в выражении IN, созданным из подзапроса.max_bytes_ratio_before_external_distinct
Доля доступной памяти сервера или пользователя, используемая для расчёта порога внешнегоDISTINCT в начале выполнения. Например, при значении 0.5 используется половина доступной памяти.
Значение должно быть не меньше 0 и меньше 1. Значение 0 отключает этот порог. При отсутствии применимого ограничения памяти сервера или пользователя эта доля не действует.
max_memory_usage не влияет на этот расчёт. Чтобы настроить сброс данных на диск относительно этого ограничения, используйте max_bytes_before_external_distinct, оставив запас для дополнительного использования памяти.
max_bytes_ratio_before_external_group_by
Доля доступной памяти, которую разрешено использовать дляGROUP BY. После
достижения этого значения для агрегации начинает использоваться внешняя память.
Например, если установлено значение 0.6, GROUP BY сможет использовать 60% доступной памяти
(server/user/merges) на начальном этапе выполнения, после чего
начнёт использовать внешнюю агрегацию.
max_bytes_ratio_before_external_join
Доля доступной памяти, которую разрешено использовать дляJOIN. При достижении этого значения hash join будет преобразован в grace hash join, чтобы выполнять сброс данных правой части на диск.
Например, если задано значение 0.6, JOIN позволит использовать 60% доступной памяти (для server/user/merges) для хеш-таблицы правой части в начале выполнения; после этого начнется сброс данных на диск.
Если заданы и max_bytes_before_external_join, и max_bytes_ratio_before_external_join, используется меньший из получившихся порогов. Если значение доли равно 0, применяется только абсолютная настройка.
Действует для любого join_algorithm, основанного на хешировании, включая grace_hash, при условии, что настроен путь для временных данных.
max_bytes_ratio_before_external_sort
Доля доступной памяти, которую разрешено использовать дляORDER BY. После достижения этого порога используется внешняя сортировка.
Например, если установить значение 0.6, ORDER BY сможет использовать 60% доступной памяти (для server/user/merges) в начале выполнения, после чего начнёт использовать внешнюю сортировку.
Обратите внимание, что ограничение max_bytes_before_external_sort по-прежнему действует: выгрузка на диск выполняется только в том случае, если блок сортировки превышает max_bytes_before_external_sort.
max_bytes_to_read
Максимальное количество байтов (несжатых данных), которое можно прочитать из таблицы при выполнении запроса. Ограничение проверяется для каждого обработанного фрагмента данных, применяется только к наиболее глубокому табличному выражению, а при чтении с удалённого сервера проверяется только на удалённом сервере.max_bytes_to_read_leaf
Максимальное число байтов (несжатых данных), которое можно прочитать из локальной таблицы на листовом узле при выполнении распределённого запроса. Хотя распределённые запросы могут отправлять несколько подзапросов на каждый сегмент (листовой узел), этот лимит проверяется только на стадии чтения на листовых узлах и игнорируется на стадии слияния результатов на корневом узле. Например, кластер состоит из 2 сегментов, и каждый сегмент содержит таблицу со 100 байтами данных. Распределённый запрос, который должен прочитать все данные из обеих таблиц с настройкойmax_bytes_to_read=150, завершится ошибкой, поскольку
в сумме получится 200 байт. Запрос с max_bytes_to_read_leaf=150 выполнится успешно, так как
листовые узлы прочитают максимум 100 байт.
Ограничение проверяется для каждого обработанного фрагмента данных.
Этот параметр нестабилен при
prefer_localhost_replica=1.max_bytes_to_sort
Максимальное количество байт, обрабатываемых перед сортировкой. Если для операции ORDER BY требуется обработать больше указанного объёма несжатых данных, поведение определяется параметромsort_overflow_mode, который по умолчанию имеет значение throw.