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

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

> Настройки сеанса ClickHouse в автоматически созданной группе webassembly_udf_*.

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Экспериментальная возможность
        </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="webassembly_udf_input_split_memory_ratio">
  webassembly\_udf\_input\_split\_memory\_ratio
</h2>

<ExperimentalBadge />

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

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

Доля линейной памяти экземпляра WebAssembly UDF, которую может занимать сериализованный вход одного вызова. Должна быть не менее 0 и не более 1; при значении по умолчанию вторая половина остаётся guest-коду под его собственный working set помимо входного buffer.

Именно запас ниже 1 делает батчинг безопасным: собственные данные guest-кода, его stack и allocator используют ту же память и не видны host-окружению. Значение ratio, близкое к 1, не оставляет им ничего, поэтому вызов, размер которого подобран по этому значению, всё равно может завершиться ошибкой в allocator guest-кода.

Настройка читается только для `ABI BUFFERED_V1` и определяет размер вызовов лишь при `webassembly_udf_max_input_block_size`, равном 0: ненулевой размер блока вместо этого ограничивает число строк на вызов.

Батч никогда не уменьшается меньше одной строки, поэтому строка, сериализованный размер которой сам превышает бюджет, передаётся отдельно, а строка, слишком большая для линейной памяти модуля, приводит к ошибке в allocator guest-кода.

Установите 0, чтобы не разбивать вход: весь блок конвейера передаётся одним вызовом.

<h2 id="webassembly_udf_max_fuel">
  webassembly\_udf\_max\_fuel
</h2>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "100000"},{"label": "Новая настройка для ограничения числа инструкций CPU (fuel) за одно выполнение экземпляра WebAssembly UDF."}]}]} />

Ограничение fuel на одно выполнение экземпляра WebAssembly UDF. Каждая инструкция WebAssembly потребляет некоторое количество fuel. Перед передачей в среду выполнения значение умножается на 1024, поэтому `webassembly_udf_max_fuel = 1` соответствует примерно 1024 единицам fuel. Установите 0, чтобы снять ограничение. Применяется только к функциям, у которых для настройки `webassembly_udf_enable_fuel` задано значение true; это значение используется по умолчанию.

<h2 id="webassembly_udf_max_input_block_size">
  webassembly\_udf\_max\_input\_block\_size
</h2>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "0"},{"label": "Новая настройка для ограничения размера входного блока для WebAssembly UDF."}]}]} />

Максимальное число строк, передаваемых в WebAssembly UDF за один вызов. Ненулевое значение ограничивает число строк на вызов и действует для любого ABI.

Значение 0 означает, что размер вызовов определяется по их сериализованным входным данным. Это касается только `ABI BUFFERED_V1` — единственного ABI, который сериализует входной блок целиком в память guest: его блоки разбиваются так, чтобы входные данные вызова не превышали долю `webassembly_udf_input_split_memory_ratio` от линейной памяти модуля. `ROW_DIRECT` передаёт аргументы как значения WebAssembly, а `ASSEMBLYSCRIPT` создаёт по одному объекту на строку, поэтому ни у того, ни у другого нет сериализованных входных данных, по которым можно было бы определить размер вызова, и при значении 0 блок конвейера остаётся целым.

<h2 id="webassembly_udf_max_instances">
  webassembly\_udf\_max\_instances
</h2>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "32"},{"label": "Новая настройка, ограничивающая число параллельных экземпляров WebAssembly UDF для каждой функции."}]}]} />

Максимальное число экземпляров WebAssembly UDF, которые могут выполняться параллельно для каждой функции.

<h2 id="webassembly_udf_max_memory">
  webassembly\_udf\_max\_memory
</h2>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "134217728"},{"label": "Новая настройка для ограничения объема памяти для каждого экземпляра WebAssembly UDF."}]}]} />

Ограничение объема памяти в байтах для каждого экземпляра WebAssembly UDF.
