> ## 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_* セッション設定

> webassembly_udf_* 生成グループ内の ClickHouse セッション設定。

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](/ja/reference/system-tables/settings) で参照でき、[ソースコード](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) から自動生成されています。

## webassembly\_udf\_input\_split\_memory\_ratio

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.5"},{"label": "1回の呼び出しのシリアル化された入力が WebAssembly UDF インスタンスのリニアメモリのうちどれだけの割合を占有できるかを制御する新しい設定。シリアル化された入力の動的な分割も有効になります。26.9 未満の `compatibility` ではこの値は 0 に設定され、`webassembly_udf_max_input_block_size = 0` がパイプラインブロックごとに1回の呼び出しを意味していた従来の動作に戻ります。"}]}]} />

1回の呼び出しのシリアル化された入力が、WebAssembly UDF インスタンスのリニアメモリのうち占有できる割合です。0 以上 1 以下である必要があります。デフォルト値では、入力バッファとは別にゲストが自身の working set に使用できるよう、残りの半分を確保します。

1 に達しない余裕があることが、batching の安全性を担保します。ゲスト自身のデータ、stack、アロケータは同じメモリを共有しており、host からは見えません。1 に近い ratio ではこれらの領域が残らないため、その値に基づいてサイズを決めた呼び出しであっても、ゲストのアロケータ内部で失敗することがあります。

`ABI BUFFERED_V1` でのみ読み取られ、呼び出しのサイズを決めるのは `webassembly_udf_max_input_block_size` が 0 の場合に限られます。ブロックサイズが 0 以外の場合は、代わりに呼び出しあたりの行数が上限となります。

batch が 1 行を下回ることはないため、シリアル化されたサイズ自体が予算を超える行は単独で渡され、モジュール のリニアメモリに収まらないほど大きい行はゲストのアロケータ内部で失敗します。

入力を分割しない場合は 0 に設定します。パイプラインブロック全体が1回の呼び出しで渡されます。

## webassembly\_udf\_max\_fuel

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "100000"},{"label": "各 WebAssembly UDF インスタンス の実行あたりの CPU 命令（fuel）を制限するための新しい設定。"}]}]} />

WebAssembly UDF インスタンス の実行ごとの fuel 上限です。各 WebAssembly 命令は一定量の fuel を消費します。この値はランタイムに渡される前に 1024 倍されるため、`webassembly_udf_max_fuel = 1` はおよそ 1024 fuel 単位に相当します。有限の上限を設けない場合は 0 に設定します。これは、関数ごとの設定 `webassembly_udf_enable_fuel` が true である関数にのみ適用され、これが既定値です。

## webassembly\_udf\_max\_input\_block\_size

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "0"},{"label": "WebAssembly UDF の入力ブロックサイズを制限するための新しい設定。"}]}]} />

1 回の呼び出しで WebAssembly UDF に渡される行数の上限です。0 以外の値を指定すると、呼び出しごとの行数が制限され、すべての ABI に適用されます。

代わりにシリアル化された入力に基づいて呼び出しサイズを決定するには、0 に設定します。これは、入力ブロック全体をゲストメモリにシリアル化する唯一の ABI である `ABI BUFFERED_V1` にのみ適用されます。この ABI では、呼び出しの入力がモジュールのリニアメモリの `webassembly_udf_input_split_memory_ratio` 以内に収まるようにブロックが分割されます。`ROW_DIRECT` は引数を WebAssembly 値として渡し、`ASSEMBLYSCRIPT` は行ごとに 1 つのオブジェクトを構築するため、いずれにも呼び出しサイズの基準となるシリアル化された入力はありません。したがって、0 を指定してもこれらのパイプラインブロックはそのままです。

## webassembly\_udf\_max\_instances

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "32"},{"label": "関数ごとに並列で実行できる WebAssembly UDF インスタンス数を制限する新しい設定。"}]}]} />

関数ごとに並列で実行できる WebAssembly UDF インスタンスの最大数。

## webassembly\_udf\_max\_memory

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "134217728"},{"label": "WebAssembly UDF インスタンスあたりのメモリを制限する新しい設定。"}]}]} />

WebAssembly UDF インスタンスあたりのメモリ制限 (バイト単位) 。
