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

# configurações de sessão max_bytes_*

> Configurações de sessão do ClickHouse no grupo gerado de max_bytes_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versão", "Valor padrão", "Comentário"];
  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
  }}>
        Histórico de versões
      </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
  }}>Tipo</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Padrão</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Pode ser alterado sem reiniciar
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Essas configurações estão disponíveis em [system.settings](/pt-BR/reference/system-tables/settings) e são autogeradas a partir do [código-fonte](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="max_bytes_before_external_distinct">
  max\_bytes\_before\_external\_distinct
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0"},{"label": "Nova configuração para habilitar o spill de `DISTINCT` em disco quando o uso de memória ultrapassa o limiar informado em bytes. Se for 0, apenas `max_bytes_ratio_before_external_distinct` se aplica."}]}]} />

Limiar de memória da consulta, em bytes, para fazer spill de dados de `DISTINCT` em disco. O uso real de memória pode ultrapassar
esse limiar.

`0` desabilita esse limiar. Se `max_bytes_ratio_before_external_distinct` também definir um limiar,
o menor deles é utilizado. Defina ambas as configurações como `0` para desabilitar o spill.

Consulte [DISTINCT em memória externa](/pt-BR/reference/statements/select/distinct#distinct-in-external-memory).

<h2 id="max_bytes_before_external_group_by">
  max\_bytes\_before\_external\_group\_by
</h2>

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

Valor padrão no Cloud: metade da memória por réplica.

Ativa ou desativa a execução de cláusulas `GROUP BY` em memória externa.
(Consulte [GROUP BY em memória externa](/pt-BR/reference/statements/select/group-by#group-by-in-external-memory))

Valores possíveis:

* Volume máximo de RAM (em bytes) que pode ser usado por uma única operação de [GROUP BY](/pt-BR/reference/statements/select/group-by).
* `0` — `GROUP BY` em memória externa desativado.

<Note>
  Se o uso de memória durante operações de GROUP BY exceder esse limite em bytes,
  ative o modo de agregação externa (gravando os dados em disco).

  O valor recomendado é metade da memória disponível no sistema.
</Note>

<h2 id="max_bytes_before_external_join">
  max\_bytes\_before\_external\_join
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "Nova configuração para controlar o spill automático de hash join em disco. Um valor diferente de zero habilita o spill e define o limite em bytes."}]}]} />

Se for definido com um valor diferente de zero, o hash join será convertido automaticamente em grace hash join para permitir o spill em disco quando os dados do lado direito excederem essa quantidade de bytes. Junto com `max_bytes_ratio_before_external_join`, este é o gatilho de spill baseado em limiar para todo `join_algorithm` baseado em hash, incluindo `grace_hash`, que exige que um dos dois seja diferente de zero. Quando um limiar diferente de zero torna uma junção capaz de realizar spill, `enable_adaptive_memory_spill_scheduler` pode forçá-la a realizar spill sob pressão de memória antes que o limiar seja atingido; com ambas as configurações em `0`, a junção nunca realiza spill, portanto o scheduler não tem nada para acionar. A exceção é `legacy_join_size_limits_trigger_spilling`: quando habilitada, `grace_hash` independente ignora ambas e realiza spill com base em `max_rows_in_join` / `max_bytes_in_join`. Quando definido como 0 (padrão), esse limite absoluto em bytes fica desabilitado, mas o spill automático ainda pode ocorrer por meio de `max_bytes_ratio_before_external_join` (cujo valor padrão é `0.5`); defina ambos como `0` para desabilitar completamente o spill automático. Isso impede a otimização de leitura read in order por meio de join.

<h2 id="max_bytes_before_external_sort">
  max\_bytes\_before\_external\_sort
</h2>

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

Valor padrão no Cloud: metade da memória por réplica.

Habilita ou desabilita a execução de cláusulas `ORDER BY` na memória externa. Consulte [Detalhes de implementação do ORDER BY](/pt-BR/reference/statements/select/order-by#implementation-details)
Se o uso de memória durante a operação ORDER BY exceder esse limite em bytes, o modo de "ordenação externa" (gravar dados em disco) será ativado.

Valores possíveis:

* Volume máximo de RAM (em bytes) que pode ser usado por uma única operação [ORDER BY](/pt-BR/reference/statements/select/order-by).
  O valor recomendado é metade da memória disponível no sistema
* `0` — `ORDER BY` na memória externa desabilitado.

<h2 id="max_bytes_before_remerge_sort">
  max\_bytes\_before\_remerge\_sort
</h2>

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

No caso de ORDER BY com LIMIT, quando o uso de memória for maior que o limite especificado, execute etapas adicionais de mesclagem de blocos antes da mesclagem final para manter apenas as primeiras LIMIT linhas.

<h2 id="max_bytes_for_lazy_final">
  max\_bytes\_for\_lazy\_final
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "256000000"},{"label": "Nova configuração para o número máximo de bytes no conjunto para a otimização lazy do FINAL"}]}]} />

Número máximo de bytes no conjunto para a otimização lazy do FINAL. Se esse limite for excedido, volta para o FINAL normal.

<h2 id="max_bytes_in_distinct">
  max\_bytes\_in\_distinct
</h2>

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

O número máximo de bytes do estado (em bytes não comprimidos) na memória
usado por uma tabela hash ao utilizar DISTINCT.

<h2 id="max_bytes_in_join">
  max\_bytes\_in\_join
</h2>

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

O tamanho máximo, em bytes, da estrutura de dados do lado direito (geralmente, uma
tabela hash) usada em junções entre tabelas.

Essa configuração se aplica às operações [SELECT ... JOIN](/pt-BR/reference/statements/select/join)
e ao [Join table engine](/pt-BR/reference/engines/table-engines/special/join).

Se uma consulta contiver várias junções, o ClickHouse verificará essa configuração para cada
resultado intermediário. Trata-se de um limite rígido para todo `join_algorithm` baseado em hash: quando o limite
é atingido, a consulta lança um erro ou interrompe conforme
[`join_overflow_mode`](/pt-BR/reference/settings/session-settings/join#join_overflow_mode).
Ela nunca faz uma junção gravar em disco (spill) — essa decisão cabe a
[`max_bytes_before_external_join`](/pt-BR/reference/settings/session-settings/max-bytes#max_bytes_before_external_join)
e
[`max_bytes_ratio_before_external_join`](/pt-BR/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_join).
Por ser um limite rígido e não um gatilho, defini-la em um valor igual ou inferior ao limiar de spill
normalmente faz a consulta falhar antes que a junção possa sequer fazer spill —
a menos que a junção suporte spill e `enable_adaptive_memory_spill_scheduler`
force um spill primeiro, ou que
`legacy_join_size_limits_trigger_spilling` transforme esse limite novamente em um gatilho de spill
para a parte de uma junção que já é executada em disco.

O limite contabiliza o que as tabelas hash armazenam, de modo que uma junção que fez spill o atinge à
medida que cada bucket é carregado, e não enquanto o lado direito é lido: ela pode ler mais
do lado direito antes de parar do que um hash join em memória faria.

Valores possíveis:

* Inteiro positivo.
* 0 — O controle de memória está desabilitado.

<h2 id="max_bytes_in_set">
  max\_bytes\_in\_set
</h2>

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

O número máximo de bytes (de dados não comprimidos) usados por um conjunto criado a partir de uma subconsulta na cláusula IN.

<h2 id="max_bytes_ratio_before_external_distinct">
  max\_bytes\_ratio\_before\_external\_distinct
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.5"},{"label": "Nova configuração para habilitar o spill de `DISTINCT` para disco quando o uso de memória exceder a razão informada da memória disponível. Se 0, apenas `max_bytes_before_external_distinct` se aplica."}]}]} />

Fração da memória disponível do servidor ou do usuário usada para calcular o limiar do `DISTINCT` externo no
início da execução. Por exemplo, `0.5` usa metade da memória disponível.

Os valores devem ser no mínimo `0` e menores que `1`. `0` desabilita esse limiar. Sem um limite de memória
aplicável de servidor ou de usuário, a razão não tem efeito.

`max_memory_usage` não afeta esse cálculo. Para configurar o spill em relação a esse limite,
use `max_bytes_before_external_distinct`, deixando espaço para uso adicional de memória.

<h2 id="max_bytes_ratio_before_external_group_by">
  max\_bytes\_ratio\_before\_external\_group\_by
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "Ativar o spill automático para disco por padrão."}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "Nova configuração."}]}]} />

A razão da memória disponível que pode ser usada pelo `GROUP BY`. Ao atingir esse limite,
a memória externa é usada para agregação.

Por exemplo, se definido como `0.6`, o `GROUP BY` permitirá usar 60% da memória disponível
(para servidor/usuário/merges) no início da execução; depois disso,
começará a usar agregação externa.

<h2 id="max_bytes_ratio_before_external_join">
  max\_bytes\_ratio\_before\_external\_join
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "0.5"},{"label": "Nova configuração: razão da memória disponível usada como limiar para spill em hash join. Habilitada por padrão em `0.5`, espelhando `max_bytes_ratio_before_external_group_by` e `max_bytes_ratio_before_external_sort`. Combinada com o valor absoluto `max_bytes_before_external_join` (o menor dos dois se aplica)."}]}]} />

A razão da memória disponível que pode ser usada pelo `JOIN`. Quando esse limite é atingido, o hash join será convertido em grace hash join para gravar em disco os dados do lado direito.

Por exemplo, se definido como `0.6`, o `JOIN` permitirá usar `60%` da memória disponível (para servidor/usuário/merges) para a tabela hash do lado direito no início da execução; depois disso, começará a gravar em disco.

Se `max_bytes_before_external_join` e `max_bytes_ratio_before_external_join` estiverem ambos definidos, será usado o menor limiar resultante. Se a razão for `0`, somente a configuração absoluta se aplica.

Tem efeito para todo `join_algorithm` baseado em hash, incluindo `grace_hash`, desde que um caminho temporário de dados esteja configurado.

<h2 id="max_bytes_ratio_before_external_sort">
  max\_bytes\_ratio\_before\_external\_sort
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "Habilita o spill automático em disco por padrão."}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "Nova configuração."}]}]} />

A razão da memória disponível que pode ser usada pelo `ORDER BY`. Quando esse limite é atingido, a ordenação externa é usada.

Por exemplo, se definido como `0.6`, o `ORDER BY` permitirá usar `60%` da memória disponível (para servidor/usuário/merges) no início da execução; depois disso, começará a usar ordenação externa.

Observe que `max_bytes_before_external_sort` continua sendo respeitado; o spill em disco será feito apenas se o bloco de ordenação for maior que `max_bytes_before_external_sort`.

<h2 id="max_bytes_to_read">
  max\_bytes\_to\_read
</h2>

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

O número máximo de bytes (de dados não comprimidos) que pode ser lido de uma tabela ao executar uma consulta.
A restrição é verificada para cada fragmento de dados processado, aplicada apenas à
expressão de tabela mais profunda e, ao ler de um servidor remoto, verificada apenas no
servidor remoto.

<h2 id="max_bytes_to_read_leaf">
  max\_bytes\_to\_read\_leaf
</h2>

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

O número máximo de bytes (de dados não comprimidos) que podem ser lidos de uma
tabela local em um nó folha ao executar uma consulta distribuída. Embora consultas distribuídas
possam emitir várias subconsultas para cada shard (folha), esse limite será
verificado apenas no estágio de leitura nos nós folha e será ignorado no
estágio de mesclagem dos resultados no nó raiz.

Por exemplo, um cluster consiste em 2 shards, e cada shard contém uma tabela com
100 bytes de dados. Uma consulta distribuída que deve ler todos os dados
de ambas as tabelas com a configuração `max_bytes_to_read=150` falhará, pois o total
será de 200 bytes. Uma consulta com `max_bytes_to_read_leaf=150` terá êxito, já que
os nós folha lerão no máximo 100 bytes.

A restrição é verificada para cada fragmento de dados processado.

<Note>
  Essa configuração é instável com `prefer_localhost_replica=1`.
</Note>

<h2 id="max_bytes_to_sort">
  max\_bytes\_to\_sort
</h2>

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

O número máximo de bytes antes da ordenação. Se for necessário processar, na operação ORDER BY, mais bytes não comprimidos do que a quantidade especificada, o comportamento será
determinado por `sort_overflow_mode`, que por padrão é definido como `throw`.

<h2 id="max_bytes_to_transfer">
  max\_bytes\_to\_transfer
</h2>

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

O número máximo de bytes (dados não comprimidos) que podem ser transferidos para um
servidor remoto ou salvos em uma tabela temporária quando a cláusula GLOBAL IN/JOIN é executada.
