I have a Perl script that asks ZABBIX for all active triggers. This request is taking very long at times, sometimes never finishing. To combat this for now, I've restricted the statement_timeout for the zabbix DB user in PostgreSQL.
Here is the Perl snippet:
And the resulting error on PostgreSQL 9.1:
Is there anything that can be done to optimize this to avoid these errors?
Here is the Perl snippet:
Code:
my $json_request = {
jsonrpc => "2.0",
method => "trigger.get",
params => {
output => "extend",
select_items => "extend",
filter => {
host => $host,
value => "1"
},
sortfield => "lastchange",
sortorder => "DESC",
skipDependent => "1"
},
auth => $auth_token,
id => 1
};
2012-02-07 20:59:03 GMT ERROR: canceling statement due to statement timeout
2012-02-07 20:59:03 GMT STATEMENT: SELECT DISTINCT t.*,hg.groupid,h.host,h.hostid FROM triggers t,functions f,items i,hosts_groups hg,rights r,users_groups ug,hosts h WHERE ((t.triggerid BETWEEN 000000000000000 AND 099999999999999)) AND f.triggerid=t.triggerid AND f.itemid=i.itemid AND hg.hostid=i.hostid AND r.id=hg.groupid AND r.groupid=ug.usrgrpid AND ug.userid=25 AND r.permission>=2 AND NOT EXISTS( SELECT ff.triggerid FROM functions ff, items ii WHERE ff.triggerid=t.triggerid 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=25 AND rr.permission<2)) AND (hg.groupid IN (6)) AND NOT EXISTS ( SELECT ff.functionid FROM functions ff WHERE ff.triggerid=t.triggerid AND EXISTS ( SELECT ii.itemid FROM items ii, hosts hh WHERE ff.itemid=ii.itemid AND hh.hostid=ii.hostid AND ( ii.status<>0 OR hh.status<>0 ) ) ) AND t.status=0 AND ( (t.value IN (1)) ) AND h.hostid=i.hostid
2012-02-07 20:59:03 GMT STATEMENT: SELECT DISTINCT t.*,hg.groupid,h.host,h.hostid FROM triggers t,functions f,items i,hosts_groups hg,rights r,users_groups ug,hosts h WHERE ((t.triggerid BETWEEN 000000000000000 AND 099999999999999)) AND f.triggerid=t.triggerid AND f.itemid=i.itemid AND hg.hostid=i.hostid AND r.id=hg.groupid AND r.groupid=ug.usrgrpid AND ug.userid=25 AND r.permission>=2 AND NOT EXISTS( SELECT ff.triggerid FROM functions ff, items ii WHERE ff.triggerid=t.triggerid 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=25 AND rr.permission<2)) AND (hg.groupid IN (6)) AND NOT EXISTS ( SELECT ff.functionid FROM functions ff WHERE ff.triggerid=t.triggerid AND EXISTS ( SELECT ii.itemid FROM items ii, hosts hh WHERE ff.itemid=ii.itemid AND hh.hostid=ii.hostid AND ( ii.status<>0 OR hh.status<>0 ) ) ) AND t.status=0 AND ( (t.value IN (1)) ) AND h.hostid=i.hostid