zabbix 2.0.3
Возникла следущая проблемма:
Таблица events разраслась до 200к и раздел "события" стал медленно открываться, так же как и "последние 20 событий" на панели. Под аккаунтом супер-администратора менее заметно.
Лог mysql'я показал медленые запросы типа:
SELECT DISTINCT e . *
FROM EVENTS e, functions f, items i, hosts_groups hg, rights r, users_groups ug
WHERE e.object =0
AND f.triggerid = e.objectid
AND f.itemid = i.itemid
AND hg.hostid = i.hostid
AND r.id = hg.groupid
AND r.groupid = ug.usrgrpid
AND ug.userid =18
AND r.permission >=2
AND NOT
EXISTS (
SELECT ff.triggerid
FROM functions ff, items ii
WHERE ff.triggerid = e.objectid
AND ff.itemid = ii.itemid
AND EXISTS (
SELECT hgg.groupid
FROM hosts_groups hgg, rights rr, users_groups gg
WHERE hgg.hostid = ii.hostid
AND rr.id = hgg.groupid
AND rr.groupid = gg.usrgrpid
AND gg.userid =18
AND rr.permission <2
)
)
AND e.eventid
BETWEEN 000000000000000
AND 099999999999999
AND ((e.value_changed IN ('1')))
ORDER BY e.eventid
LIMIT 1
OFFSET 0
Это тзапрос у меня выполняется 12с
Как я понимаю:
1. DISTINCT здесь совершенно не нужен (без него "Запрос занял 0.0029 сек.")
2. подзапрос "AND NOT EXISTS...", он здесь нужен?
Похожие темы:
Возникла следущая проблемма:
Таблица events разраслась до 200к и раздел "события" стал медленно открываться, так же как и "последние 20 событий" на панели. Под аккаунтом супер-администратора менее заметно.
Лог mysql'я показал медленые запросы типа:
SELECT DISTINCT e . *
FROM EVENTS e, functions f, items i, hosts_groups hg, rights r, users_groups ug
WHERE e.object =0
AND f.triggerid = e.objectid
AND f.itemid = i.itemid
AND hg.hostid = i.hostid
AND r.id = hg.groupid
AND r.groupid = ug.usrgrpid
AND ug.userid =18
AND r.permission >=2
AND NOT
EXISTS (
SELECT ff.triggerid
FROM functions ff, items ii
WHERE ff.triggerid = e.objectid
AND ff.itemid = ii.itemid
AND EXISTS (
SELECT hgg.groupid
FROM hosts_groups hgg, rights rr, users_groups gg
WHERE hgg.hostid = ii.hostid
AND rr.id = hgg.groupid
AND rr.groupid = gg.usrgrpid
AND gg.userid =18
AND rr.permission <2
)
)
AND e.eventid
BETWEEN 000000000000000
AND 099999999999999
AND ((e.value_changed IN ('1')))
ORDER BY e.eventid
LIMIT 1
OFFSET 0
Это тзапрос у меня выполняется 12с

Как я понимаю:
1. DISTINCT здесь совершенно не нужен (без него "Запрос занял 0.0029 сек.")
2. подзапрос "AND NOT EXISTS...", он здесь нужен?
Похожие темы:
Comment