Перейти к основному содержимому
Перейти к основному содержимому

Переполнение памяти

Переполнение памяти — это экспериментальная техника, предназначенная для установки более гибких лимитов по памяти для запросов.

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

Когда лимит по памяти достигнут, любой запрос будет ждать некоторое время при попытке выделить новую память. Если тайм-аут истечет и память будет освобождена, запрос продолжит выполнение. В противном случае будет выброшено исключение, и запрос будет завершен.

Выбор запроса для остановки или завершения выполняется либо с помощью глобального, либо с помощью пользовательского трекера переполнения в зависимости от того, какой лимит памяти был достигнут. Если трекер переполнения не может выбрать запрос для остановки, будет выброшено исключение MEMORY_LIMIT_EXCEEDED.

Трекер переполнения пользователя

Трекер переполнения пользователя находит запрос с наибольшим коэффициентом переполнения в списке запросов пользователя. Коэффициент переполнения для запроса вычисляется как количество выделенных байт, деленное на значение настройки memory_overcommit_ratio_denominator_for_user.

Если memory_overcommit_ratio_denominator_for_user для запроса равно нулю, трекер переполнения не выберет этот запрос.

Тайм-аут ожидания устанавливается параметром memory_usage_overcommit_max_wait_microseconds.

Пример

Глобальный трекер переполнения

Глобальный трекер переполнения находит запрос с наибольшим коэффициентом переполнения в списке всех запросов. В этом случае коэффициент переполнения вычисляется как количество выделенных байт, деленное на значение настройки memory_overcommit_ratio_denominator.

Если memory_overcommit_ratio_denominator для запроса равно нулю, трекер переполнения не выберет этот запрос.

Тайм-аут ожидания устанавливается параметром memory_usage_overcommit_max_wait_microseconds в файле конфигурации.