> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Paramètres de session columns_cache_*

> Paramètres de session ClickHouse appartenant au groupe généré columns_cache_*.

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Fonctionnalité en bêta</span>
        </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 [code source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="columns_cache_max_bytes_to_write_to_cache">
  columns\_cache\_max\_bytes\_to\_write\_to\_cache
</h2>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "0"},{"label": "Nouveau paramètre : seuil souple, par requête, du nombre d'octets écrits dans le cache de colonnes ; indicatif, il peut être dépassé au maximum des entrées qu'un lecteur écrit en un batch (0 = la moitié de la limite de taille actuelle du cache de colonnes, qui diminue en cas de pression mémoire)."}]}]} />

Seuil souple, par requête, du nombre d'octets qu'une même requête écrit dans le cache de colonnes. Les octets écrits pendant la requête sont comptabilisés et, dès que le compteur atteint cette valeur, les écritures suivantes dans le cache sont ignorées jusqu'à la fin de la requête. Il s'agit d'un seuil indicatif et non d'une limite stricte : un lecteur accumule les entrées des granules qu'il a lus et les écrit dans le cache en un seul batch, et le batch qui franchit le seuil est stocké intégralement avant d'être décompté. La quantité réellement écrite peut donc dépasser cette valeur, au maximum, des entrées qu'un lecteur accumule entre deux écritures (les colonnes qu'il lit, à raison d'une entrée par segment (stripe) d'environ 65536 lignes) et, lorsque plusieurs lecteurs s'exécutent simultanément, de cette quantité pour chacun d'eux. L'objectif est d'éviter qu'un seul parcours volumineux n'évince des données utiles du cache, et non de borner précisément l'utilisation du cache.

Une valeur de `0` correspond à la moitié de la limite de taille actuelle du cache de colonnes : la valeur configurée de `columns_cache_size`, ou moins lorsque le cache est réduit en raison d'une pression mémoire (voir la métrique `ColumnsCacheSizeLimit`).

<h2 id="columns_cache_max_estimated_bytes_to_write_to_cache">
  columns\_cache\_max\_estimated\_bytes\_to\_write\_to\_cache
</h2>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "0"},{"label": "Nouveau paramètre : plafond du nombre estimé d'octets non compressés lus par une requête au-delà duquel les écritures dans le cache de colonnes ne sont plus autorisées (0 = la moitié de la limite de taille actuelle du cache de colonnes, qui diminue en cas de pression mémoire)."}]}]} />

Si la taille estimée des données qu'une requête lit depuis des parts `MergeTree` dépasse cette valeur, les écritures dans le cache de colonnes sont désactivées pour l'ensemble de la requête. L'estimation est exprimée en octets non compressés, c'est-à-dire l'unité dans laquelle le cache est décompté. Elle est calculée à partir de la taille des colonnes lues par la requête (y compris les colonnes de `PREWHERE`, de mutation et de parts de patch), rapportée aux plages de marques sélectionnées, et la totalité de ce montant est imputée à la requête avant même qu'elle ne lise quoi que ce soit. Cela évite qu'un seul parcours volumineux n'évince des données utiles du cache et n'y copie des données qui ne pourraient pas y rester.

Une valeur de `0` signifie que l'on utilise la moitié de la limite de taille actuelle du cache de colonnes. Cette limite correspond au `columns_cache_size` configuré tant que le serveur dispose de mémoire en suffisance, mais le cache se réduit en cas de pression mémoire (voir la métrique `ColumnsCacheSizeLimit`), et le budget par défaut se réduit avec lui. Avec la valeur par défaut de `columns_cache_size_ratio`, la moitié de la limite correspond à la taille du segment probatoire du cache : les données d'une requête qui franchit ce seuil peuvent donc être entièrement mises en cache en une seule passe.

Ce seuil ne s'applique pas à une lecture qui écarte des plages de marques en cours d'exécution, ce qui est le cas lorsque `use_indexes_refiner_in_read_pools` est activé : le nombre de marques sélectionnées réellement lues par une telle lecture n'est déterminé qu'au moment où chaque task est découpée, si bien que l'estimation ci-dessus ne serait qu'une borne supérieure comptabilisant des marques que la requête ne lit jamais. Pour ces lectures, c'est `columns_cache_max_bytes_to_write_to_cache` qui limite la quantité écrite.
