Перейти к основному содержанию
Оверкоммит памяти — это экспериментальный метод, предназначенный для задания более гибких ограничений памяти для запросов. Идея этого метода заключается во введении настроек, которые задают гарантированный объем памяти, доступный запросу. Когда оверкоммит памяти включен и достигнут лимит памяти, ClickHouse выберет запрос с наибольшим оверкоммитом и попытается освободить память, завершив этот запрос. При достижении лимита памяти любой запрос будет некоторое время ждать при попытке выделить дополнительную память. Если тайм-аут истек и память освободилась, запрос продолжит выполнение. В противном случае будет сгенерировано исключение, и запрос будет завершен. Выбор запроса для остановки или завершения выполняется либо глобальным, либо пользовательским трекером оверкоммита — в зависимости от того, какой лимит памяти достигнут. Если трекер оверкоммита не может выбрать запрос для остановки, генерируется исключение MEMORY_LIMIT_EXCEEDED.

Пользовательский трекер оверкоммита

Пользовательский трекер оверкоммита находит в списке запросов пользователя запрос с самым большим коэффициентом оверкоммита памяти. Коэффициент оверкоммита памяти для запроса вычисляется как число выделенных байтов, делённое на значение настройки memory_overcommit_ratio_denominator_for_user. Если для запроса значение memory_overcommit_ratio_denominator_for_user равно нулю, трекер оверкоммита не выберет этот запрос. Тайм-аут ожидания задаётся настройкой memory_usage_overcommit_max_wait_microseconds. Пример
SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator_for_user=4000, memory_usage_overcommit_max_wait_microseconds=500

Глобальный трекер оверкоммита

Глобальный трекер оверкоммита находит в списке всех запросов запрос с самым большим коэффициентом оверкоммита памяти. В этом случае коэффициент оверкоммита памяти вычисляется как число выделенных байтов, делённое на значение настройки memory_overcommit_ratio_denominator. Если для запроса значение memory_overcommit_ratio_denominator равно нулю, трекер оверкоммита не выберет этот запрос. Тайм-аут ожидания задаётся параметром memory_usage_overcommit_max_wait_microseconds в файле конфигурации.
Последнее изменение 10 июня 2026 г.