Перегрузка сервера
Обзор
Иногда сервер может стать перегруженным по различным причинам. Для определения текущей нагрузки на ЦП
сервер ClickHouse вычисляет соотношение времени ожидания ЦП (OSCPUWaitMicroseconds
метрика) к времени загрузки
(OSCPUVirtualTimeMicroseconds
метрика). Когда сервер перегружен выше определенного соотношения,
имеет смысл отвергнуть некоторые запросы или даже отключить запросы на подключение, чтобы не увеличивать нагрузку еще больше.
Существует настройка сервера os_cpu_busy_time_threshold
, которая контролирует минимальное время загрузки, чтобы считать ЦП
выполняющим какую-то полезную работу. Если текущее значение метрики OSCPUVirtualTimeMicroseconds
ниже этого значения,
нагрузка на ЦП считается равной 0.
Отклонение запросов
Поведение отклонения запросов контролируется настройками уровня запроса min_os_cpu_wait_time_ratio_to_throw
и
max_os_cpu_wait_time_ratio_to_throw
. Если эти настройки заданы и min_os_cpu_wait_time_ratio_to_throw
меньше
чем max_os_cpu_wait_time_ratio_to_throw
, тогда запрос будет отклонен, и будет выброшена ошибка SERVER_OVERLOADED
с некоторой вероятностью, если соотношение нагрузки по ЦП составляет как минимум min_os_cpu_wait_time_ratio_to_throw
. Вероятность
определяется как линейная интерполяция между минимальным и максимальным соотношениями. Например, если min_os_cpu_wait_time_ratio_to_throw = 2
,
max_os_cpu_wait_time_ratio_to_throw = 6
, и cpu_overload = 4
, тогда запрос будет отклонен с вероятностью 0.5
.
Отключение подключений
Отключение подключений контролируется настройками уровня сервера min_os_cpu_wait_time_ratio_to_drop_connection
и
max_os_cpu_wait_time_ratio_to_drop_connection
. Эти настройки можно изменить без перезапуска сервера. Идея этих
настроек аналогична идее отклонения запросов. Единственное различие в этом случае состоит в том, что если сервер перегружен,
попытка подключения будет отклонена со стороны сервера.
Предупреждения о перегрузке ресурсов
ClickHouse также записывает предупреждения о перегрузке ЦП и памяти в таблицу system.warnings
, когда сервер перегружен. Вы можете
настроить эти пороги через конфигурацию сервера.
Пример