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

# distributed_plan_* 세션 설정

> distributed_plan_* 그룹에서 생성된 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](/ko/reference/system-tables/settings)에서 확인할 수 있으며 [소스 코드](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp)로부터 자동 생성됩니다.

<div id="distributed_plan_default_reader_bucket_count">
  ## distributed\_plan\_default\_reader\_bucket\_count
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="NonZeroUInt64" default_value="8" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "8"},{"label": "새 실험적 설정."}]}]} />

분산 쿼리에서 병렬 읽기에 사용되는 기본 작업 수입니다. 작업은 레플리카 간에 분산됩니다.
규칙 기반 분산 플래너에서 사용됩니다. 비용 기반 최적화기는 추정 비용에 따라 읽기 팬아웃을 선택하며 이 설정을 사용하지 않습니다.

<div id="distributed_plan_default_shuffle_join_bucket_count">
  ## distributed\_plan\_default\_shuffle\_join\_bucket\_count
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="NonZeroUInt64" default_value="8" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "8"},{"label": "새 실험적 설정."}]}]} />

분산 shuffle-hash join의 기본 버킷 개수입니다.
규칙 기반 분산 플래너에서 사용됩니다. 비용 기반 최적화기는 추정 비용에 따라 팬아웃을 선택하므로 이 설정을 사용하지 않습니다.

<div id="distributed_plan_execute_locally">
  ## distributed\_plan\_execute\_locally
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "0"},{"label": "새로운 실험적 설정."}]}]} />

분산 쿼리 계획의 모든 작업을 로컬에서 실행합니다. 테스트와 디버깅에 유용합니다.

<div id="distributed_plan_force_exchange_kind">
  ## distributed\_plan\_force\_exchange\_kind
</div>

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": ""},{"label": "새 실험적 설정."}]}]} />

분산 쿼리 단계 간에 지정된 종류의 Exchange 연산자를 강제합니다.

가능한 값:

* '' - 어떤 종류의 Exchange 연산자도 강제하지 않고 옵티마이저가 선택하도록 합니다.
* 'Persisted' - 객체 스토리지의 임시 파일을 사용합니다.
* 'Streaming' - 네트워크를 통해 Exchange 데이터를 스트리밍합니다.

<div id="distributed_plan_force_shuffle_aggregation">
  ## distributed\_plan\_force\_shuffle\_aggregation
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.7"},{"label": "0"},{"label": "새 실험적 설정"}]}]} />

분산 쿼리 계획에서 PartialAggregation + Merge 대신 Shuffle 집계 전략을 사용합니다.

<div id="distributed_plan_max_rows_to_broadcast">
  ## distributed\_plan\_max\_rows\_to\_broadcast
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.7"},{"label": "20000"},{"label": "새 실험적 설정."}]}]} />

분산 쿼리 계획에서 shuffle join 대신 broadcast join을 사용하기 위한 최대 행 수입니다.
규칙 기반 분산 플래너를 위한 휴리스틱입니다. 비용 기반 최적화기가 활성화되면 추정 비용에 따라 broadcast와 shuffle 중 하나를 선택하므로 이 설정은 적용되지 않습니다.

<div id="distributed_plan_optimize_exchanges">
  ## distributed\_plan\_optimize\_exchanges
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "1"},{"label": "새 실험적 설정."}]}]} />

분산 쿼리 계획에서 불필요한 데이터 교환을 제거합니다. 디버깅을 위해 비활성화하십시오.

<div id="distributed_plan_prefer_replicas_over_workers">
  ## distributed\_plan\_prefer\_replicas\_over\_workers
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "레플리카용 분산 계획을 직렬화하는 새로운 설정"}]}]} />

레플리카에서 실행할 수 있도록 분산 쿼리 계획을 직렬화합니다.

<div id="distributed_plan_workers_num">
  ## distributed\_plan\_workers\_num
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "분산 쿼리에 임대할 상태 비저장 워커 수를 지정하는 새로운 실험적 설정입니다. 0이면 임대를 비활성화합니다."}]}]} />

이 쿼리 실행에 사용할 상태 비저장 워커 수입니다. 0이면 분산 계획에 대한 상태 비저장 워커 임대가 비활성화됩니다.

<div id="distributed_plan_workers_provisioning_timeout_ms">
  ## distributed\_plan\_workers\_provisioning\_timeout\_ms
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "10000"},{"label": "실행 전에 임대된 상태 비저장 워커에 연결할 수 있을 때까지 쿼리가 대기하는 시간을 제한하는 새로운 설정입니다. `compatibility`가 26.9 미만이면 이전의 대기하지 않는 동작으로 복원됩니다."}]}]} />

실행 전 쿼리가 상태 비저장 워커를 프로비저닝하는 데 사용할 수 있는 총 실제 경과 시간(밀리초)입니다. 디스커버리 서비스에서 워커를 임대하고 연결할 수 있는지 확인하는 시간이 포함됩니다. 쿼리는 임대된 워커가 준비될 때까지 이 시간 한도 내에서 대기합니다. 시간이 만료되면 지금까지 확인된 워커로 쿼리를 진행하며, 사용 가능한 워커가 하나도 없으면 실패합니다. 0으로 설정하면 초기 임대 및 확인 단계에서만 대기하며 재시도하지 않습니다.
