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

# configurações de sessão max_insert_*

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

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 geradas automaticamente a partir do [código-fonte](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="max_insert_block_size">
  ## max\_insert\_block\_size
</div>

**Aliases**: `max_insert_block_size_rows`

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

O tamanho máximo dos blocos (em número de linhas) a serem formados para inserção em uma tabela.

Essa configuração controla a formação de blocos em dois contextos:

1. Análise de formatos: Quando o servidor analisa formatos de entrada baseados em linhas (CSV, TSV, JSONEachRow etc.) de qualquer interface (HTTP, clickhouse-client com dados inline, gRPC, PostgreSQL wire protocol), os blocos são emitidos quando:

   * Ambos min\_insert\_block\_size\_rows AND min\_insert\_block\_size\_bytes são atingidos, OR
   * max\_insert\_block\_size\_rows OR max\_insert\_block\_size\_bytes é atingido

   Observação: Ao usar clickhouse-client ou clickhouse-local para ler de um arquivo, o próprio cliente analisa os dados, e essa configuração se aplica no lado do cliente.

2. Operações de INSERT: Durante consultas INSERT e quando os dados fluem por visões materializadas, o comportamento dessa configuração depende de `use_strict_insert_block_limits`:

   * Quando ativado: Os blocos são emitidos quando:
     * Limiares mínimos (AND): Ambos min\_insert\_block\_size\_rows AND min\_insert\_block\_size\_bytes são atingidos
     * Limiares máximos (OR): max\_insert\_block\_size\_rows OR max\_insert\_block\_size\_bytes é atingido

   * Quando desativado: Os blocos são emitidos quando min\_insert\_block\_size\_rows OR min\_insert\_block\_size\_bytes é atingido. As configurações max\_insert\_block\_size não são aplicadas.

Valores possíveis:

* Inteiro positivo.

<div id="max_insert_block_size_bytes">
  ## max\_insert\_block\_size\_bytes
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.1"},{"label": "0"},{"label": "Nova configuração que permite controlar o tamanho dos blocos em bytes durante a análise de dados no formato de entrada Row."}]}]} />

O tamanho máximo dos blocos (em bytes) a serem formados para inserção em uma tabela.

Essa configuração funciona em conjunto com max\_insert\_block\_size\_rows e controla a formação de blocos no mesmo contexto. Consulte max\_insert\_block\_size\_rows para obter informações detalhadas sobre quando e como essas configurações são aplicadas.

Valores possíveis:

* Inteiro positivo.
* 0 — a configuração não participa da formação de blocos.

<div id="max_insert_delayed_streams_for_parallel_write">
  ## max\_insert\_delayed\_streams\_for\_parallel\_write
</div>

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

O número máximo de fluxos (colunas) cujo flush final da parte pode ser atrasado. Padrão: auto (100 caso o armazenamento subjacente ofereça suporte à gravação paralela, por exemplo S3, e desabilitado caso contrário)

Valor padrão no Cloud: `50`.

<div id="max_insert_threads">
  ## max\_insert\_threads
</div>

<SettingsInfoBlock type="MaxThreads" default_value="auto(N)" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "Alterou o padrão de 1 (sem execução em paralelo) para auto (0), que corresponde ao número de núcleos de CPU disponíveis no servidor, reduzido sob pressão de memória por meio de `max_insert_threads_min_free_memory_per_thread`. Isso paraleliza `INSERT SELECT` por padrão. Defina como 1 para restaurar o comportamento anterior de thread única."}]}]} />

O número máximo de threads para executar a consulta `INSERT`.

Isso se aplica tanto a `INSERT SELECT` quanto a um `INSERT` simples cujos dados são enviados pelo
`clickhouse-client` ou pela interface HTTP. O lado de gravação do pipeline
(agregação dos blocos e gravação na tabela de destino) é paralelizado
em até essa quantidade de threads.

Valores possíveis:

* 0 — Automático. Usa o número de núcleos de CPU disponíveis no servidor (o mesmo valor automático de [`max_threads`](/pt-BR/reference/settings/session-settings/max-threads#max_threads)), reduzido sob pressão de memória por [`max_insert_threads_min_free_memory_per_thread`](/pt-BR/reference/settings/session-settings/max-insert#max_insert_threads_min_free_memory_per_thread).
* 1 — o `INSERT` é executado em uma única thread (sem execução em paralelo). Use isto para preservar a ordem de inserção de `INSERT ... SELECT`.
* Inteiro positivo maior que 1 — Execução em paralelo com o número especificado de threads.

Antes da versão 26.8, o padrão era `1` (sem execução em paralelo). Desde a 26.8, o padrão (`0`) corresponde ao número de núcleos de CPU, portanto o `INSERT` é paralelizado por padrão. Defina `max_insert_threads` como `1` (ou use a configuração `compatibility`) para restaurar o comportamento anterior.

Valor padrão no Cloud:

* `1` para nós com 8 GiB de memória
* `2` para nós com 16 GiB de memória
* `4` para nós maiores

O `INSERT SELECT` paralelo só tem efeito se a parte `SELECT` for executada em paralelo; consulte a configuração [`max_threads`](/pt-BR/reference/settings/session-settings/max-threads#max_threads).
Para um `INSERT` simples, os dados de entrada são lidos e analisados como um único fluxo, e o pipeline é então redimensionado para essa quantidade de fluxos para gravação.
A paralelização do lado de gravação se aplica apenas a `INSERT`s simples síncronos: inserções assíncronas ([`async_insert`](/pt-BR/reference/settings/session-settings/async-insert#async_insert) `= 1`) são armazenadas em uma fila e gravadas em segundo plano, portanto não são afetadas por essa configuração e sempre permanecem em um único fluxo.
O lado de gravação é paralelizado apenas quando é seguro fazê-lo; caso contrário, permanece em um único fluxo e esta configuração não tem efeito sobre ele. Em particular, a gravação é mantida em um único fluxo quando [`use_strict_insert_block_limits`](/pt-BR/reference/settings/session-settings/use#use_strict_insert_block_limits) está habilitada, uma tabela de destino (ou uma tabela para a qual ela encaminha dados) desduplica blocos inseridos e a desduplicação de inserção está habilitada para a consulta (consulte [`deduplicate_insert`](/pt-BR/reference/settings/session-settings/deduplicate-insert#deduplicate_insert)), quando o destino tem visões materializadas dependentes — incluindo visões de uma tabela para a qual o destino encaminha dados, por exemplo, por trás de um `Alias` — (a menos que [`parallel_view_processing`](/pt-BR/reference/settings/session-settings/parallel#parallel_view_processing) esteja habilitada e as cadeias de visões dependentes não apresentem riscos de desduplicação — a desduplicação nas visões está desabilitada ([`deduplicate_blocks_in_dependent_materialized_views`](/pt-BR/reference/settings/session-settings/other#deduplicate_blocks_in_dependent_materialized_views)) ou nenhum caminho de visão dependente possa desduplicar), e sempre para destinos `Buffer` e `Distributed`. Um `Buffer` grava em seu próprio contexto e um `Distributed` encaminha a gravação para um fragmento remoto (que pode armazenar os dados em buffer), portanto as configurações de desduplicação desta consulta não controlam a gravação final, que é mantida em um único fluxo independentemente delas. Uma inserção de quorum não paralela ([`insert_quorum`](/pt-BR/reference/settings/session-settings/insert-quorum#insert_quorum) é `2` ou maior, ou `'auto'`, e [`insert_quorum_parallel`](/pt-BR/reference/settings/session-settings/insert-quorum#insert_quorum_parallel) está desabilitada) também permanece em um único fluxo, pois permite apenas uma parte de quorum em andamento por tabela.
Valores mais altos resultam em maior uso de memória.

<div id="max_insert_threads_min_free_memory_per_thread">
  ## max\_insert\_threads\_min\_free\_memory\_per\_thread
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "4294967296"},{"label": "Nova configuração para limitar o número de threads de inserção com base na quantidade de memória livre disponível"}]}]} />

Igual a `max_threads_min_free_memory_per_thread`, mas aplicado a `max_insert_threads` em vez de `max_threads`. O valor padrão é mais alto porque pipelines de inserção normalmente mantêm buffers maiores por thread (partes da MergeTree, blocos de compressão) do que pipelines de leitura.

Se a quantidade de memória livre for menor que `max_insert_threads` multiplicado por esse valor, `max_insert_threads` será reduzido para se ajustar, até o mínimo de `1`.

Defina como `0` para desabilitar esse limite.
