> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Настройки сеанса max_bytes_*

> Настройки сеанса ClickHouse из сгенерированной группы max_bytes_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Версия", "Значение по умолчанию", "Комментарий"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        История версий
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Тип</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>По умолчанию</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Изменяется без перезапуска
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Эти настройки доступны в [system.settings](/ru/reference/system-tables/settings) и автоматически генерируются на основе [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

## max\_bytes\_before\_external\_distinct

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0"},{"label": "Новая настройка для включения сброса данных `DISTINCT` на диск, если использование памяти превышает заданный порог в байтах. Если значение равно 0, применяется только `max_bytes_ratio_before_external_distinct`."}]}]} />

Порог использования памяти запросом в байтах, при достижении которого данные `DISTINCT` сбрасываются на диск. Фактическое использование памяти может превышать
этот порог.

`0` отключает этот порог. Если `max_bytes_ratio_before_external_distinct` также задаёт порог,
используется меньшее из значений. Установите для обеих настроек значение `0`, чтобы отключить сброс данных на диск.

См. [DISTINCT во внешней памяти](/ru/reference/statements/select/distinct#distinct-in-external-memory).

## max\_bytes\_before\_external\_group\_by

<SettingsInfoBlock type="UInt64" default_value="0" />

Значение по умолчанию в Cloud: половина объема памяти для каждой реплики.

Включает или отключает выполнение секций `GROUP BY` с использованием внешней памяти.
(См. [GROUP BY во внешней памяти](/ru/reference/statements/select/group-by#group-by-in-external-memory))

Возможные значения:

* Максимальный объем оперативной памяти (в байтах), который может использовать одна операция [GROUP BY](/ru/reference/statements/select/group-by).
* `0` — `GROUP BY` с использованием внешней памяти отключен.

<Note>
  Если использование памяти во время операций GROUP BY превышает этот порог в байтах,
  активируется режим «внешней агрегации» (сброс данных на диск).

  Рекомендуемое значение — половина доступной системной памяти.
</Note>

## max\_bytes\_before\_external\_join

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "Новая настройка для управления автоматическим сбросом данных hash 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

<SettingsInfoBlock type="UInt64" default_value="0" />

Значение по умолчанию в Cloud: половина объёма памяти для каждой реплики.

Включает или отключает выполнение секций `ORDER BY` во внешней памяти. См. [Подробности реализации ORDER BY](/ru/reference/statements/select/order-by#implementation-details)
Если использование памяти во время операции ORDER BY превышает этот порог в байтах, активируется режим «внешней сортировки» (сброс данных на диск).

Возможные значения:

* Максимальный объём оперативной памяти (в байтах), который может использовать одна операция [ORDER BY](/ru/reference/statements/select/order-by).
  Рекомендуемое значение — половина доступной системной памяти
* `0` — `ORDER BY` во внешней памяти отключён.

## max\_bytes\_before\_remerge\_sort

<SettingsInfoBlock type="UInt64" default_value="1000000000" />

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

## max\_bytes\_for\_lazy\_final

<SettingsInfoBlock type="UInt64" default_value="256000000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "256000000"},{"label": "Новая настройка для максимального количества байт в наборе для оптимизации отложенного FINAL"}]}]} />

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

## max\_bytes\_in\_distinct

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальный размер состояния в памяти (в несжатых байтах),
используемого хеш-таблицей при выполнении DISTINCT.

## max\_bytes\_in\_join

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальный размер в байтах структуры данных правой части (обычно хеш-таблицы), используемой при JOIN таблиц.

Этот параметр применяется к операциям [SELECT ... JOIN](/ru/reference/statements/select/join) и [движку таблицы Join](/ru/reference/engines/table-engines/special/join).

Если запрос содержит несколько JOIN, ClickHouse проверяет этот параметр для каждого промежуточного результата. Это жесткое ограничение для любого `join_algorithm` на основе хеширования: при достижении лимита запрос генерирует исключение или прерывается в соответствии с [`join_overflow_mode`](/ru/reference/settings/session-settings/join#join_overflow_mode).
Оно никогда не приводит к сбросу данных JOIN на диск — за это отвечают
[`max_bytes_before_external_join`](/ru/reference/settings/session-settings/max-bytes#max_bytes_before_external_join)
и
[`max_bytes_ratio_before_external_join`](/ru/reference/settings/session-settings/max-bytes#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

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальное количество байтов (несжатых данных), используемых множеством в выражении IN, созданным из подзапроса.

## max\_bytes\_ratio\_before\_external\_distinct

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.5"},{"label": "Новая настройка, включающая сброс данных `DISTINCT` на диск, когда использование памяти превышает заданную долю доступной памяти. Если равно 0, применяется только `max_bytes_before_external_distinct`."}]}]} />

Доля доступной памяти сервера или пользователя, используемая для расчёта порога внешнего `DISTINCT` в начале выполнения. Например, при значении `0.5` используется половина доступной памяти.

Значение должно быть не меньше `0` и меньше `1`. Значение `0` отключает этот порог. При отсутствии применимого ограничения памяти сервера или пользователя эта доля не действует.

`max_memory_usage` не влияет на этот расчёт. Чтобы настроить сброс данных на диск относительно этого ограничения, используйте `max_bytes_before_external_distinct`, оставив запас для дополнительного использования памяти.

## max\_bytes\_ratio\_before\_external\_group\_by

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "включён автоматический сброс на диск по умолчанию"}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "Новая настройка"}]}]} />

Доля доступной памяти, которую разрешено использовать для `GROUP BY`. После
достижения этого значения для агрегации начинает использоваться внешняя память.

Например, если установлено значение `0.6`, `GROUP BY` сможет использовать 60% доступной памяти
(server/user/merges) на начальном этапе выполнения, после чего
начнёт использовать внешнюю агрегацию.

## max\_bytes\_ratio\_before\_external\_join

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "0.5"},{"label": "Новая настройка: доля доступной памяти, используемая как порог сброса данных на диск для hash JOIN. По умолчанию включена со значением `0.5`, по аналогии с `max_bytes_ratio_before_external_group_by` и `max_bytes_ratio_before_external_sort`. Используется вместе с абсолютным значением `max_bytes_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

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "Включён автоматический сброс на диск по умолчанию."}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "Новая настройка."}]}]} />

Доля доступной памяти, которую разрешено использовать для `ORDER BY`. После достижения этого порога используется внешняя сортировка.

Например, если установить значение `0.6`, `ORDER BY` сможет использовать `60%` доступной памяти (для server/user/merges) в начале выполнения, после чего начнёт использовать внешнюю сортировку.

Обратите внимание, что ограничение `max_bytes_before_external_sort` по-прежнему действует: выгрузка на диск выполняется только в том случае, если блок сортировки превышает `max_bytes_before_external_sort`.

## max\_bytes\_to\_read

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальное количество байтов (несжатых данных), которое можно прочитать из таблицы при выполнении запроса.
Ограничение проверяется для каждого обработанного фрагмента данных, применяется только к
наиболее глубокому табличному выражению, а при чтении с удалённого сервера проверяется только на
удалённом сервере.

## max\_bytes\_to\_read\_leaf

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальное число байтов (несжатых данных), которое можно прочитать из локальной
таблицы на листовом узле при выполнении распределённого запроса. Хотя распределённые запросы
могут отправлять несколько подзапросов на каждый сегмент (листовой узел), этот лимит
проверяется только на стадии чтения на листовых узлах и игнорируется на
стадии слияния результатов на корневом узле.

Например, кластер состоит из 2 сегментов, и каждый сегмент содержит таблицу со
100 байтами данных. Распределённый запрос, который должен прочитать все данные
из обеих таблиц с настройкой `max_bytes_to_read=150`, завершится ошибкой, поскольку
в сумме получится 200 байт. Запрос с `max_bytes_to_read_leaf=150` выполнится успешно, так как
листовые узлы прочитают максимум 100 байт.

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

<Note>
  Этот параметр нестабилен при `prefer_localhost_replica=1`.
</Note>

## max\_bytes\_to\_sort

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальное количество байт, обрабатываемых перед сортировкой. Если для операции ORDER BY требуется обработать больше указанного объёма несжатых данных, поведение определяется параметром `sort_overflow_mode`, который по умолчанию имеет значение `throw`.

## max\_bytes\_to\_transfer

<SettingsInfoBlock type="UInt64" default_value="0" />

Максимальное количество байтов (несжатых данных), которое может быть передано на удалённый
сервер или сохранено во временной таблице при выполнении выражения GLOBAL IN/JOIN.
