Я пометил комментариями запросы в src/zabbix_server/poller/poller.c
И долго смотрел SHOW PROCESSLIST;
Чаще всего видел запрос из ветки
default: /* ZBX_POLLER_TYPE_NORMAL */
result = DBselect("select /*3*/ %s where i.nextcheck<
Запрос там получается типа такого
Создал индекс
items_test2 on items (status, type,key_, nextcheck)
судя по плану он используется.
Идея mod(i.itemid,30)=3 понятна, каждый поллер проверяет только свои items. Жаль мускль не умеет функциональных индексов. У меня в таблице items 3тыс записей, а если у кого больше оно же сканирует постоянно лишнюю часть индекса.
один запрос попал slow_queries.log наверно случайно, но
src/libs/zbxserver/functions.c
distinct явно лишний, из items выберется одна строка т.к. i.itemid=, а в секции селект есть t.triggerid, короче я distinct убрал.
И долго смотрел SHOW PROCESSLIST;
Чаще всего видел запрос из ветки
default: /* ZBX_POLLER_TYPE_NORMAL */
result = DBselect("select /*3*/ %s where i.nextcheck<
Запрос там получается типа такого
Code:
select i.itemid,i.key_,h.host,h.port,i.delay,i.description,i.nextcheck,i.type,
i.snmp_community,i.snmp_oid,h.useip,h.ip,i.history,i.lastvalue,i.prevvalue,i.hostid,h.status,i.value_type,
h.errors_from,i.snmp_port,i.delta,i.prevorgvalue,i.lastclock,i.units,i.multiplier,i.snmpv3_securityname,i.snmpv3_securitylevel,
i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.formula,h.available,i.status,i.trapper_hosts,i.logtimefmt,i.valuemapid,i.delay_flex,
h.dns,i.params,i.trends,h.useipmi,h.ipmi_port,
h.ipmi_authtype,h.ipmi_privilege,h.ipmi_username,h.ipmi_password,i.ipmi_sensor,i.lastlogsize
from `hosts` h, `items` i
where i.nextcheck<=1245237273 + 5
and h.hostid=i.hostid
and h.status=0 and i.status in (0)
and ((h.disable_until<=now() and h.errors_from=0 and i.type in (0,1,4,6)) or i.type in (3,5,8,10,11))
and (h.proxy_hostid=0 or i.type in (5))
and mod(i.itemid,30)=3 and i.`key_` not in ('status','icmpping','icmppingsec','zabbix[log]')
order by i.nextcheck
items_test2 on items (status, type,key_, nextcheck)
судя по плану он используется.
Идея mod(i.itemid,30)=3 понятна, каждый поллер проверяет только свои items. Жаль мускль не умеет функциональных индексов. У меня в таблице items 3тыс записей, а если у кого больше оно же сканирует постоянно лишнюю часть индекса.
один запрос попал slow_queries.log наверно случайно, но
src/libs/zbxserver/functions.c
Code:
result = DBselect("select distinct t.triggerid,t.expression,t.description,t.url,t.comments,t.status,t.value,t.priority,t.type from triggers t,functions f,items i where i.status<>%d and i.itemid=f.itemid and t.status=%d and f.triggerid=t.triggerid and f.itemid=" ZBX_FS_UI64
Comment