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