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

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

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

Идея этой техники состоит в том, чтобы ввести настройки, которые могут представлять гарантированное количество памяти, которое может использовать запрос. Когда переопределение памяти включено и лимит памяти достигнут, 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 в файле конфигурации.