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

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

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

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Бета</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Возможность в статусе бета</span>
        </a>;
};

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).

<h2 id="columns_cache_max_bytes_to_write_to_cache">
  columns\_cache\_max\_bytes\_to\_write\_to\_cache
</h2>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "0"},{"label": "Новая настройка: мягкий порог на объём данных в байтах, записываемых одним запросом в кэш столбцов; носит рекомендательный характер и может быть превышен на объём записей, которые один считыватель записывает одним батчем (0 = половина текущего ограничения размера кэша столбцов, которое уменьшается при нехватке памяти)."}]}]} />

Мягкий порог на объём данных в байтах, которые один запрос записывает в кэш столбцов. Байты, записанные во время выполнения запроса, подсчитываются, и как только счётчик достигает этого значения, все последующие записи в кэш до конца запроса пропускаются. Это рекомендательный порог, а не жёсткое ограничение: считыватель накапливает записи прочитанных им гранул и записывает их в кэш одним батчем, причём батч, на котором порог превышается, сохраняется целиком, и лишь затем его объём учитывается счётчиком. Поэтому фактический объём записанных данных может превысить это значение на объём записей, которые один считыватель накапливает между двумя операциями записи (по одной записи на каждую полосу примерно из 65536 строк для каждого читаемого столбца), а при одновременной работе нескольких считывателей — на такой объём для каждого из них. Настройка нужна для того, чтобы одно крупное сканирование не вытесняло из кэша полезные данные, а не для точного ограничения использования кэша.

Значение `0` означает половину текущего ограничения размера кэша столбцов: заданного значения `columns_cache_size` или меньшего, если кэш уменьшен из-за нехватки памяти (см. метрику `ColumnsCacheSizeLimit`).

<h2 id="columns_cache_max_estimated_bytes_to_write_to_cache">
  columns\_cache\_max\_estimated\_bytes\_to\_write\_to\_cache
</h2>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "0"},{"label": "Новая настройка: ограничение на оценочный объём несжатых байт, читаемых запросом, при котором разрешена запись в кэш столбцов (0 = половина текущего лимита размера кэша столбцов, который уменьшается при нехватке памяти)."}]}]} />

Если оценочный размер данных, которые запрос читает из частей `MergeTree`, превышает это значение, запись в кэш столбцов запрещается для всего запроса. Оценка выполняется в несжатых байтах (именно в них измеряется объём, занимаемый в кэше) на основе размера столбцов, которые читает запрос (включая столбцы `PREWHERE`, мутаций и patch-частей), пропорционально выбранным диапазонам меток, причём весь этот объём засчитывается запросу ещё до начала чтения. Благодаря этому одно крупное сканирование не вытесняет из кэша полезные данные и не копирует в кэш данные, которые всё равно не смогут в нём удержаться.

Значение `0` означает, что используется половина текущего лимита размера кэша столбцов. Пока у сервера достаточно свободной памяти, этот лимит равен заданному значению `columns_cache_size`, однако при нехватке памяти кэш уменьшается (см. метрику `ColumnsCacheSizeLimit`), а вместе с ним уменьшается и бюджет по умолчанию. При значении `columns_cache_size_ratio` по умолчанию половина лимита равна размеру испытательного сегмента кэша, поэтому данные запроса, прошедшего эту проверку, могут быть полностью закэшированы за один проход.

Проверка не применяется к чтению, которое отбрасывает диапазоны меток в процессе выполнения, — так происходит, когда включена настройка `use_indexes_refiner_in_read_pools`: сколько из выбранных меток такое чтение действительно затронет, становится известно только при формировании каждой задачи, поэтому приведённая выше оценка была бы лишь верхней границей и учитывала бы метки, которые запрос так и не прочитает. Для таких чтений объём записываемых данных ограничивается настройкой `columns_cache_max_bytes_to_write_to_cache`.
