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

# distributed_plan_* 세션 설정

> distributed_plan_* 그룹에서 생성된 ClickHouse 세션 설정입니다.

export const PrivatePreviewBadge = () => {
  return <div className="privatePreviewBadge">
            <div className="privatePreviewIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M5.33301 6.66667V4.66667V4.66667C5.33301 3.194 6.52701 2 7.99967 2V2C9.47234 2 10.6663 3.194 10.6663 4.66667V4.66667V6.66667" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path d="M8.00033 9.33337V11.3334" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path fillRule="evenodd" clipRule="evenodd" d="M11.333 14H4.66634C3.92967 14 3.33301 13.4033 3.33301 12.6666V7.99996C3.33301 7.26329 3.92967 6.66663 4.66634 6.66663H11.333C12.0697 6.66663 12.6663 7.26329 12.6663 7.99996V12.6666C12.6663 13.4033 12.0697 14 11.333 14Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            {'비공개 프리뷰'}
        </div>;
};

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)로부터 자동 생성됩니다.

## distributed\_plan\_default\_reader\_bucket\_count

<ExperimentalBadge />

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

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

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

## distributed\_plan\_default\_shuffle\_join\_bucket\_count

<ExperimentalBadge />

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

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

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

## distributed\_plan\_execute\_locally

<ExperimentalBadge />

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

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

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

## distributed\_plan\_fallback\_to\_local\_execution

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "1"},{"label": "계획을 분산할 수 없을 때 로컬 실행으로 폴백하는 새로운 설정입니다(`make_distributed_plan`이 활성화된 경우에만 적용됨)."}]}]} />

쿼리 계획에 분산 실행을 지원하지 않는 단계가 포함되어 있으면 예외를 발생시키는 대신 그 이유를 로그에 기록하고 initiator에서 쿼리를 실행합니다. 예외를 발생시키려면 이 설정을 비활성화하십시오.

`make_distributed_plan`(비공개 프리뷰)이 활성화된 경우에만 적용됩니다.

## distributed\_plan\_force\_exchange\_kind

<ExperimentalBadge />

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

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

가능한 값:

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

## distributed\_plan\_force\_shuffle\_aggregation

<ExperimentalBadge />

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

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

분산 쿼리 계획에서 PartialAggregation + Merge 대신 Shuffle 집계 전략을 사용합니다.
Shuffle 전략이 올바른 결과를 생성할 수 없는 경우, 예를 들어 `GROUPING SETS`를 사용하거나 집계가 버킷 순서대로 결과를 생성해야 하는 경우에는 무시됩니다.

## distributed\_plan\_max\_rows\_to\_broadcast

<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 중 하나를 선택하므로 이 설정은 적용되지 않습니다.

## distributed\_plan\_optimize\_exchanges

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

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

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

## distributed\_plan\_prefer\_replicas\_over\_workers

<PrivatePreviewBadge />

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

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

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

## distributed\_plan\_read\_in\_order

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0"},{"label": "분산 쿼리 계획에서 `ORDER BY`에 대한 순서 기반 읽기 최적화를 허용하는 새로운 설정입니다. 테이블의 정렬 키를 정렬된 순서로 읽을 경우 정렬을 건너뛰고 조기에 중지할 수 있습니다. 기본값은 비활성화입니다. 현재는 읽기와 정렬 사이에 순서를 보존하지 않는 exchange가 없는 형태만 안전합니다."}]}]} />

분산 쿼리 계획에서 `ORDER BY`에 대한 순서 기반 읽기 최적화를 허용합니다. 테이블의
정렬 키를 정렬된 순서로 읽을 경우 스캔 후 정렬하는 대신 정렬을 건너뛰고 조기에 중지할 수 있습니다.

기본값은 비활성화입니다. 정렬을 분산하는 재작성은 자신이 감싸는 정렬이 입력이 이미
정렬되어 있다는 사실에 의존하지 않는다고 가정합니다. 그러나 이러한 의존성이 있는 정렬에는 순서를 보존하지 않는 exchange를 통해 행이 전달될 수 있습니다. 현재는 읽기와 정렬 사이에 exchange가 없는 형태만 안전합니다.

## distributed\_plan\_workers\_num

<PrivatePreviewBadge />

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

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

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

## distributed\_plan\_workers\_provisioning\_timeout\_ms

<PrivatePreviewBadge />

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

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

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