Проверка неиспользуемых записей в БД zabbix

zabbix

Проверка неиспользуемых записей в БД zabbix

БД на момент исследования занимала на диске 95G.

Смотрим какой размер занимают таблицы СУБД zabbix, хранящие статистику.

SELECT table_name AS `Table`, round\(\(data\_length \+ index\_length / 1024 / 1024 / 1024 ), 2) `Size in GB` FROM information_schema.TABLES WHERE table_schema = "zabbix" and table_name like "%history%";

Смотрим кол-во записей в таблице history_uint, не имеющих активных записей в таблице контролируемых ресурсов.

SELECT countitemid AS history_uint FROM history_uint WHERE itemid NOT IN SELECT itemid FROM items WHERE status='0';

Удаляем их:

DELETE FROM history_uint WHERE itemid NOT IN SELECT itemid FROM items WHERE status='0';

Смотрим, с какого времени в нашей БД есть стат.информация

SELECT FROM_UNIXTIMEMIN\(clock) FROM history_uint;

Удаление всех записей в истории метрик, для которых нет соответствия в активной таблице метрик:

delete FROM history_uint WHERE itemid NOT IN SELECT distinct itemid FROM items;

delete FROM history WHERE itemid NOT IN SELECT distinct itemid FROM items;

***

Удаление устаревшей информации в zabbix

Для примера удаляем записи старше 180 дней.

В большинстве случаев достаточно этого:

DELETE FROM history_uint WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

DELETE FROM history WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

Для большей корректности можно почистить еще эти таблицы, но выигрыша по месту на диске это не даст:

DELETE FROM trends_uint WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

DELETE FROM trends WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

DELETE FROM events WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

DELETE FROM alerts WHERE clock \< UNIX_TIMESTAMPDATE\_SUB\(NOW\(, INTERVAL 180 DAY));

***