Pular para o conteúdo principal
Memory overcommit é uma técnica experimental destinada a permitir a definição de limites de memória mais flexíveis para consultas. A ideia dessa técnica é introduzir configurações que possam representar a quantidade garantida de memória que uma consulta pode usar. Quando o memory overcommit está habilitado e o limite de memória é atingido, o ClickHouse seleciona a consulta com maior nível de overcommit e tenta liberar memória interrompendo essa consulta. Quando o limite de memória é atingido, qualquer consulta aguarda por algum tempo ao tentar alocar mais memória. Se o timeout expirar e a memória for liberada, a consulta continua a execução. Caso contrário, uma exceção será lançada e a consulta será interrompida. A seleção da consulta a ser interrompida é realizada pelo rastreador de overcommit global ou do usuário, dependendo de qual limite de memória foi atingido. Se o rastreador de overcommit não conseguir escolher uma consulta para interromper, a exceção MEMORY_LIMIT_EXCEEDED será lançada.

Rastreador de overcommit do usuário

O rastreador de overcommit do usuário identifica a consulta com a maior razão de overcommit na lista de consultas do usuário. A razão de overcommit de uma consulta é calculada como o número de bytes alocados dividido pelo valor da configuração memory_overcommit_ratio_denominator_for_user. Se memory_overcommit_ratio_denominator_for_user da consulta for igual a zero, o rastreador de overcommit não escolherá essa consulta. O tempo limite de espera é definido pela configuração memory_usage_overcommit_max_wait_microseconds. Exemplo
SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator_for_user=4000, memory_usage_overcommit_max_wait_microseconds=500

Rastreador global de overcommit

O rastreador global de overcommit encontra a consulta com a maior razão de overcommit na lista de todas as consultas. Nesse caso, a razão de overcommit é calculada como o número de bytes alocados dividido pelo valor da configuração memory_overcommit_ratio_denominator. Se memory_overcommit_ratio_denominator da consulta for igual a zero, o rastreador de overcommit não escolherá essa consulta. O tempo limite de espera é definido pelo parâmetro memory_usage_overcommit_max_wait_microseconds no arquivo de configuração.
Última modificação em 10 de junho de 2026