Как именно работает Housekeeper в Zabbix: какие данные он очищает и как часто выполняется эта очистка?

Имеются параметры в конфигурации Zabbix сервера: <br/> HousekeepingFrequency=1 <br/> HousekeeperDelete=1000000 <br/> <br/> Что именно означает параметр HousekeeperDelete: будет ли Housekeeper каждый час удалять по 1 000 000 строк из каждой таблицы, или это общее число строк для всей БД? Или же это лимит на размер одного запроса/батча, и Housekeeper в рамках одного цикла выполнит несколько таких запросов, удалив столько строк, сколько потребуется?
  • 10 марта 2026 г. 9:17
Ответы на вопрос 4
Коротко: Housekeeper — это фоновый процесс Zabbix, который периодически удаляет «старые» данные по правилам хранения (retention) и чистит служебные/временные записи. Параметры, которые вы привели, управляют частотой запуска и «пакетом» удаляемых строк.

Что именно удаляет Housekeeper
- данные history*: history, history_uint, history_str, history_log, history_text — старые значения элементов (по периоду хранения в настройках Item / по дефолту);  
- trends и trends_uint — старые усреднения (trends) по заданному периоду;  
- events (события), alerts/acknowledges (уведомления/подтверждения), audit (журнал аудита), sessions и другие служебные таблицы — в зависимости от версии Zabbix и настроек хранения.  
Точные наборы таблиц могут слегка отличаться по версии Zabbix, но принцип один: удаляются записи старее установленных сроков хранения.

Как часто запускается
- HousekeepingFrequency=1 означает запуск housekeeping каждые 1 час. (Параметр задаётся в часах; значение по умолчанию — 1.)

Что означает HousekeeperDelete
- HousekeeperDelete задаёт «пакет» (batch/limit) строк, которые удаляются в одном SQL-удалении (в одном DELETE-интервальном запросе) для конкретной операции. Это не «жёсткий» лимит для всей БД за цикл, и это не одноразовый лимит на все таблицы суммарно.  
- На практике Housekeeper формирует DELETE-запросы (или эквивалентные подзапросы для СУБД без LIMIT) с ограничением на количество удаляемых id и выполняет их пакетами по HousekeeperDelete строк. Если в таблице больше старых строк, чем HousekeeperDelete, Zabbix будет выполнять несколько таких DELETE-пакетов подряд в рамках одного запуска housekeeper, пока не удалит все устаревшие записи или пока не закончится логика цикла (то есть пока очередной пакет возвращает 0 удалённых строк).  
- Иными словами: это лимит на размер одного батча/одного DELETE-запроса, а не «по 1 000 000 строк из каждой таблицы и всё» и не «весьма строгий глобальный лимит на цикл».

Дополнительно — важные замечания и рекомендации
- Housekeeper обычно выполняется последовательно (однопоточно) в рамках zabbix_server; большие пакеты могут давать долгие транзакции/блокировки на БД. Потому ставить очень большое значение (например, миллионы) рискованно на загруженных СУБД.  
- Если пакет слишком большой — лучше уменьшить HousekeeperDelete (например, до десятков- или сотен-тысяч в зависимости от БД и ресурсов) и/или увеличить частоту (уменьшать нагрузку за раз) — но помните HousekeepingFrequency задаётся в часах, нельзя поставить дробные часы. Можно настроить retention так, чтобы объёмы удалений были равномернее.  
- Для очень больших объёмов данных рекомендуется использовать партиционирование таблиц (если поддерживает СУБД) — тогда удаление старых партиций гораздо эффективнее, чем массовые DELETE.  
- Поведение и SQL-реализация могут немного отличаться в зависимости от версии Zabbix и типа СУБД (MySQL/MariaDB vs PostgreSQL), поэтому для точных деталей посмотрите комментарии в zabbix_server.conf и исходный код/документацию к вашей версии.

Итог по вашему примеру
- HousekeepingFrequency=1 — housekeeper запускается каждый час.  
- HousekeeperDelete=1000000 — это размер одного батча удаления (максимум 1 000 000 строк в одном DELETE-запросе/итерации). Housekeeper может выполнить несколько таких итераций для одной таблицы в одном запуске, пока есть что удалять, поэтому он потенциально может удалить больше чем 1 000 000 строк из одной таблицы за один цикл, но каждая отдельная DELETE-операция будет ограничена этим значением.
Вроде это количество записей в истории/трендах, удаляемых одним запросом с одним конкретным ID (удалённого уже) элемента данных. Если в таблице больше записей - они будут удалять по указанному количеству записей за каждый цикл очистки (ну, раз в час).
Хаускипинг - костыль для небольших инсталляций. Если вопрос связан с тем, что вы уже достаточно подросли - рекомендую партиционирование с дропом старых таблиц или, ещё лучше, TimescaleDB.
RTFM. <br/> Параметр называется <a href="https://www.zabbix.com/documentation/7.4/en/manual/appendix/config/zabbix_server?hl=HousekeepingFrequency#maxhousekeeperdelete" rel="nofollow">MaxHousekeeperDelete</a> и, как видно из его описания, это максимальное количество строк, удаляемое за один цикл работы хаускипера. Меньше можно, больше нельзя.
Похожие вопросы