Сразу скажу, что всё что ниже, на zabbix 6.4 используемом для разработки и тестирования шаблонов.
Предистория
В какой-то момент обнаружилось, что размер базы zabbix в postgres гораздо больше, чем раньше был в 5.2
Полез в базу смотреть что и как. Далее текст к размеру базы не имеет отношения, но непонятно.
Типа:
Поиск в исторических таблицах:
И натолкнулся, что в таблице history появились не привязанные к hosts записи. В других исторических таблицах всё чисто.
В history 1259 записей не привязанных к hosts. Причём только один itemid.
"itemid" "count"
59328 1259
housekeeper не зачищает. Пробовал в housekeeping выставить все сроки на 1 день.
SELECT to_timestamp(clock), * FROM public.history WHERE itemid=59328 ORDER BY clock DESC
-- 1259 rows
Все эти записи за некоторый интервал времени назад.
SELECT now(), MIN(to_timestamp(clock)), MAX(to_timestamp(clock)) FROM public.history WHERE itemid=59328
-- "2023-11-17 03:13:27.176696+00" 2023-11-02 14:26:48+00" "2023-11-06 17:26:48+00"
Как появились и как их аккуратно зачистить непонятно.
Вдруг в какой-то момент их будет гораздо больше.
Предистория
В какой-то момент обнаружилось, что размер базы zabbix в postgres гораздо больше, чем раньше был в 5.2
Полез в базу смотреть что и как. Далее текст к размеру базы не имеет отношения, но непонятно.
Типа:
Code:
-- Item count by Hosts
SELECT h.hostid, h.host, c.cnt as items
FROM public.hosts as h
INNER JOIN (
SELECT hostid, count(*) as cnt
FROM public.items
WHERE hostid in (SELECT distinct hostid FROM public.hosts WHERE status not in (3,5) and flags <> 2) AND flags not in (1,2)
GROUP BY hostid
) as c
ON c.hostid = h.hostid
ORDER BY h.host
-- Item count by Template
SELECT c.tplid, h.host as tplname, c.cnt as items
FROM public.hosts as h
INNER JOIN (
SELECT hostid as tplid, count(*) as cnt
FROM public.items
WHERE hostid in (SELECT distinct hostid FROM public.hosts WHERE status=3)
GROUP BY hostid
) as c
ON c.tplid = h.hostid
ORDER BY tplname
-- Template by Hosts
SELECT t1.host, t1.status, t2.templates, t2.templateids
FROM (
SELECT h.hostid, h.host, CASE h.status WHEN 1 THEN 'disables' ELSE 'enabled' END as status
FROM public.hosts h
WHERE h.status not in (3,5) and h.flags <> 2
) as t1
INNER JOIN (
SELECT public.hosts_templates.hostid, array_agg(public.hosts.host) as templates, array_agg(public.hosts_templates.templateid) as templateids
FROM public.hosts_templates
INNER JOIN public.hosts
ON public.hosts.status=3 AND public.hosts_templates.templateid=public.hosts.hostid
GROUP BY public.hosts_templates.hostid
) as t2
ON t2.hostid=t1.hostid
ORDER BY t1.host
Code:
-- items НЕ привязанные к Hosts
SELECT itemid, count(*)
FROM public.history
WHERE itemid not in (
SELECT distinct itemid
FROM public.items
WHERE hostid in (
SELECT distinct hostid FROM public.hosts
WHERE status not in (1,3,5) -- disable,template,proxy
AND flags <> 2
)
)
GROUP BY itemid
SELECT itemid, count(*)
FROM public.history_uint
WHERE itemid not in (
SELECT distinct itemid
FROM public.items
WHERE hostid in (
SELECT distinct hostid FROM public.hosts
WHERE status not in (1,3,5) -- disable,template,proxy
AND flags <> 2
)
)
GROUP BY itemid
В history 1259 записей не привязанных к hosts. Причём только один itemid.
"itemid" "count"
59328 1259
housekeeper не зачищает. Пробовал в housekeeping выставить все сроки на 1 день.
SELECT to_timestamp(clock), * FROM public.history WHERE itemid=59328 ORDER BY clock DESC
-- 1259 rows
Все эти записи за некоторый интервал времени назад.
SELECT now(), MIN(to_timestamp(clock)), MAX(to_timestamp(clock)) FROM public.history WHERE itemid=59328
-- "2023-11-17 03:13:27.176696+00" 2023-11-02 14:26:48+00" "2023-11-06 17:26:48+00"
Как появились и как их аккуратно зачистить непонятно.
Вдруг в какой-то момент их будет гораздо больше.
Comment