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

# paramètres de session distributed_plan_*

> Paramètres de session ClickHouse dans le groupe généré distributed_plan_*.

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>
            {'Aperçu privé'}
        </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>
            Fonctionnalité expérimentale
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Valeur par défaut", "Commentaire"];
  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
  }}>
        Historique des versions
      </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
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Par défaut</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modifiable sans redémarrage
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Ces paramètres sont disponibles dans [system.settings](/fr/reference/system-tables/settings) et sont générés automatiquement à partir du [source](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": "Nouveau paramètre expérimental."}]}]} />

Nombre de tâches par défaut pour la lecture parallèle dans une requête distribuée. Les tâches sont réparties entre les différentes répliques.
Utilisé par le planificateur distribué basé sur des règles. L’optimiseur basé sur les coûts choisit le fan-out de lecture selon le coût estimé et n’utilise pas ce paramètre.

## 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": "Nouveau paramètre expérimental."}]}]} />

Nombre de buckets par défaut pour la jointure shuffle-hash distribuée.
Utilisé par le planificateur distribué basé sur des règles. L’optimiseur basé sur les coûts choisit le fan-out selon le coût estimé et n’utilise pas ce paramètre.

## distributed\_plan\_execute\_locally

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "0"},{"label": "Nouveau paramètre expérimental."}]}]} />

Exécute toutes les tâches d’un plan de requête distribuée localement. Utile pour les tests et le débogage.

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

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "1"},{"label": "Nouveau paramètre permettant de basculer vers une exécution locale lorsqu'un plan ne peut pas être distribué (ne prend effet qu'avec `make_distributed_plan`)."}]}]} />

Lorsqu'un plan de requête contient une étape qui ne prend pas en charge l'exécution distribuée, la raison est consignée et la requête est exécutée sur l'initiateur au lieu de lever une exception. Désactivez ce paramètre pour obtenir une exception à la place.

Ne prend effet que lorsque `make_distributed_plan` (private preview) est activé.

## distributed\_plan\_force\_exchange\_kind

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": ""},{"label": "Nouveau paramètre expérimental."}]}]} />

Force le type spécifié d'opérateurs Exchange entre les étapes d'une requête distribuée.

Valeurs possibles :

* '' - ne forcer aucun type d'opérateurs Exchange et laisser l'optimiseur choisir,
* 'Persisted' - utiliser des fichiers temporaires sur le stockage objet,
* 'Streaming' - transmettre les données d'échange sur le réseau.

## distributed\_plan\_force\_shuffle\_aggregation

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.7"},{"label": "0"},{"label": "Nouveau paramètre expérimental"}]}]} />

Utiliser la stratégie d’agrégation Shuffle au lieu de PartialAggregation + Merge dans le plan de requête distribuée.
Ignoré lorsque la stratégie Shuffle ne peut pas produire un résultat correct, par exemple pour `GROUPING SETS` ou lorsque l’agrégation doit produire les résultats dans l’ordre des buckets.

## 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": "Nouveau paramètre expérimental."}]}]} />

Nombre maximal de lignes à partir duquel utiliser une jointure broadcast plutôt qu’une jointure shuffle dans un plan de requête distribuée.
Une heuristique destinée au planificateur distribué basé sur des règles. Lorsque l’optimiseur basé sur les coûts est activé, le choix entre broadcast et shuffle est effectué en fonction du coût estimé, et ce paramètre n’a aucun effet.

## distributed\_plan\_optimize\_exchanges

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "1"},{"label": "Nouveau paramètre expérimental."}]}]} />

Supprime les échanges superflus du plan de requête distribuée. Désactivez-le pour le débogage.

## 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": "Nouveau paramètre pour sérialiser le plan de requête distribuée pour les répliques"}]}]} />

Sérialise le plan de la requête distribuée pour l'exécuter sur les répliques.

## distributed\_plan\_read\_in\_order

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0"},{"label": "Nouveau paramètre permettant l'optimisation de lecture dans l'ordre pour `ORDER BY` dans un plan de requête distribué, afin qu'une lecture triée de la clé de tri de la table puisse éviter le tri et s'arrêter plus tôt. Désactivé par défaut : à ce jour, seules les formes où aucun exchange ne subsiste entre la lecture et le tri sont sûres."}]}]} />

Autorise l'optimisation de lecture dans l'ordre pour `ORDER BY` dans un plan de requête distribué, afin qu'une lecture triée de la
clé de tri de la table puisse éviter le tri et s'arrêter plus tôt, au lieu de parcourir puis trier les données.

Désactivé par défaut : le rewrite qui distribue un tri suppose que le tri qu'il encapsule ne dépend pas du fait que son entrée
soit déjà ordonnée ; or un tri qui en dépend peut se voir alimenté en rows via un exchange qui ne préserve pas
l'ordre. À ce jour, seules les formes où aucun exchange ne subsiste entre la lecture et le tri sont sûres.

## distributed\_plan\_workers\_num

<PrivatePreviewBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "Nouveau paramètre expérimental définissant le nombre de workers sans état à louer à une requête distribuée. Zéro désactive la location."}]}]} />

Nombre de workers sans état qui seront utilisés pour exécuter cette requête. Zéro désactive la location de workers sans état pour les plans distribués.

## 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": "Nouveau paramètre limitant le temps pendant lequel une requête attend que les workers sans état loués deviennent joignables avant l'exécution."}]}, {"id": "row-2","items": [{"label": "26.8"},{"label": "10000"},{"label": "Nouveau paramètre limitant le temps pendant lequel une requête attend que les workers sans état loués deviennent joignables avant l'exécution ; une valeur de `compatibility` inférieure à 26.8 rétablit le comportement précédent sans attente."}]}]} />

Durée totale écoulée, en millisecondes, qu'une requête peut consacrer au provisionnement de workers sans état avant son exécution : leur location auprès du service de découverte et la vérification qu'ils sont joignables. La requête attend, dans la limite de ce délai, que les workers loués soient prêts ; une fois ce délai écoulé, elle se poursuit avec les workers vérifiés jusque-là ou échoue si aucun n'est devenu disponible. La valeur zéro attend uniquement la passe initiale de location et de vérification (sans nouvelle tentative).
