Как выполнить более быстрый запрос на MySQL от Zabbix?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как выполнить более быстрый запрос на MySQL от Zabbix?

Сообщение Anonymous »

Я пытаюсь создать мониторинг панели панели для моей пользовательской сети, та, которая была реализована в Zabbix, не соответствует моим требованиям.

Код: Выделить всё

SELECT  ll.UF
,ll.unidade AS metric
,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 0,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 1,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,3,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 0,0,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 1,1,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,1,if(AVG(ll.degra) = 0 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) = 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) > 0 AND AVG(ll.degra) < 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,3))))))))) AS value
FROM
(
SELECT  hh.*
,if(hh.falha=1,0,1) AS ONLINE
,if(hh.falha=2,1,0) AS degra
FROM
(
SELECT  dfd1.*
,SUM(if(dfd2.name = 'Perda de Pacote' OR dfd2.name = 'Tempo de resposta de ping ICMP alto',2,if(dfd2.name = 'ICMP Ping Indisponível',1,0))) AS falha
FROM
(
SELECT  AT1.*
,AT2.itemid
FROM
(
SELECT  hb.*
FROM
(
SELECT  HOST
,LEFT(HOST,2)                                        AS UF
,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',2),'_',-1) AS Operadora
,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1) AS unidade
,SUBSTRING_INDEX(HOST,'_',-1)                        AS tipo
,if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'HS.' ,
'hospital',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'VI.' ,
'vidaeimagem',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),7) = 'HAPCLI.' ,
'hapclinica',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'PA.' ,
'prontoatendimento',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'CD.' ,
'centrodedistribuicao',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),8) = 'MEDPREV.' ,
'medprev',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'LAB.' ,
'laboratorio',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'ADM.' ,
'administrativo',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'AMB.' ,
'ambulatorio','outros' ) ) ) ) ) ) ) ) ) AS modalidade
,hostid
FROM hosts
WHERE STATUS = 0
) AS hb
LEFT JOIN hosts_groups AS idgr
ON hb.hostid = idgr.hostid
WHERE idgr.groupid = 15
) AS AT1
LEFT JOIN items AS AT2
ON AT1.hostid = AT2.hostid
) AS dfd1
LEFT JOIN
(
SELECT  gn2.itemid
,gn1.name
FROM
(
SELECT  a1.*
FROM events AS a1
LEFT JOIN event_recovery AS a2
ON a1.eventid = a2.eventid
WHERE a2.r_eventid IS NULL
AND a1.value = 1
) AS gn1
LEFT JOIN functions AS gn2
ON gn1.objectid = gn2.triggerid
WHERE gn2.itemid IS NOT NULL
) AS dfd2
ON dfd1.itemid = dfd2.itemid
GROUP BY  dfd1.host
) AS hh
) AS ll
GROUP BY  ll.unidade
ORDER BY ll.UF ASC
,VALUE desc
Я смог открыть базу данных Zabbix и запустить запросы, которые мне нужны, но запрос занял около 15 секунд и потреблял много обработки (я использовал много внутреннего соединения между таблицами банков). /> < /p>

Код: Выделить всё

CREATE TABLE `hosts` (
`hostid` BIGINT(20) UNSIGNED NOT NULL,
`proxy_hostid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
`host` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
`status` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
`flags` INT(11) NOT NULL DEFAULT '0',
`templateid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
`description` TEXT NOT NULL COLLATE 'utf8_bin',
`proxy_address` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
`auto_compress` INT(11) NOT NULL DEFAULT '1',
`discover` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`hostid`) USING BTREE,
INDEX `hosts_1` (`host`) USING BTREE,
INDEX `hosts_2` (`status`) USING BTREE,
INDEX `hosts_3` (`proxy_hostid`) USING BTREE,
INDEX `hosts_4` (`name`) USING BTREE,
INDEX `c_hosts_3` (`templateid`) USING BTREE,
CONSTRAINT `c_hosts_1` FOREIGN KEY (`proxy_hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT `c_hosts_3` FOREIGN KEY (`templateid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_bin'
ENGINE=InnoDB
;
< /code>
Таблица связывания групп с именем хоста < /p>
CREATE TABLE `hosts_groups` (
`hostgroupid` BIGINT(20) UNSIGNED NOT NULL,
`hostid` BIGINT(20) UNSIGNED NOT NULL,
`groupid` BIGINT(20) UNSIGNED NOT NULL,
PRIMARY KEY (`hostgroupid`) USING BTREE,
UNIQUE INDEX `hosts_groups_1` (`hostid`, `groupid`) USING BTREE,
INDEX `hosts_groups_2` (`groupid`) USING BTREE,
CONSTRAINT `c_hosts_groups_1` FOREIGN KEY (`hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE,
CONSTRAINT `c_hosts_groups_2` FOREIGN KEY (`groupid`) REFERENCES `zabbix`.`hstgrp` (`groupid`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_bin'
ENGINE=InnoDB
;
< /code>
Таблица, которая ссылается на элементы, чтобы запустить < /p>
CREATE TABLE `items` (
`itemid` BIGINT(20) UNSIGNED NOT NULL,
`hostid` BIGINT(20) UNSIGNED NOT NULL,
`name` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
PRIMARY KEY (`itemid`) USING BTREE,
INDEX `items_1` (`hostid`, `key_`(255)) USING BTREE,
INDEX `items_3` (`status`) USING BTREE,
CONSTRAINT `c_items_1` FOREIGN KEY (`hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_bin'
ENGINE=InnoDB
;
< /code>
Таблица, которая связывает Event_recovery с событием < /p>
CREATE TABLE `event_recovery` (
`eventid` BIGINT(20) UNSIGNED NOT NULL,
`r_eventid` BIGINT(20) UNSIGNED NOT NULL,
`c_eventid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
`correlationid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
`userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`eventid`) USING BTREE,
INDEX `event_recovery_1` (`r_eventid`) USING BTREE,
INDEX `event_recovery_2` (`c_eventid`) USING BTREE,
CONSTRAINT `c_event_recovery_1` FOREIGN KEY (`eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE,
CONSTRAINT `c_event_recovery_2` FOREIGN KEY (`r_eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE,
CONSTRAINT `c_event_recovery_3` FOREIGN KEY (`c_eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_bin'
ENGINE=InnoDB
;
< /code>
События < /p>
CREATE TABLE `events` (
`eventid` BIGINT(20) UNSIGNED NOT NULL,
`source` INT(11) NOT NULL DEFAULT '0',
`object` INT(11) NOT NULL DEFAULT '0',
`objectid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
`clock` INT(11) NOT NULL DEFAULT '0',
`value` INT(11) NOT NULL DEFAULT '0',
`acknowledged` INT(11) NOT NULL DEFAULT '0',
`ns` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(2048) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
`severity` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`eventid`) USING BTREE,
INDEX `events_1` (`source`, `object`, `objectid`, `clock`) USING BTREE,
INDEX `events_2` (`source`, `object`,  `clock`) USING BTREE
)
COLLATE='utf8_bin'
ENGINE=InnoDB
;
< /code>
Функции таблицы < /p>
CREATE TABLE `functions` (
`functionid` BIGINT(20) UNSIGNED NOT NULL,
`itemid` BIGINT(20) UNSIGNED NOT NULL,
`triggerid` BIGINT(20) UNSIGNED NOT NULL,
`name` VARCHAR(12) NOT NULL DEFAULT '' COLLATE 'utf8_bin',
`parameter` VARCHAR(255) NOT NULL DEFAULT '0' COLLATE 'utf8_bin',
PRIMARY KEY (`functionid`) USING BTREE,
INDEX `functions_1` (`triggerid`) USING BTREE,
INDEX `functions_2` (`itemid`, `name`, `parameter`) USING BTREE,
CONSTRAINT `c_functions_1` FOREIGN KEY (`itemid`) REFERENCES `zabbix`.`items` (`itemid`) ON UPDATE RESTRICT ON DELETE CASCADE,
CONSTRAINT `c_functions_2` FOREIGN KEY (`triggerid`) REFERENCES `zabbix`.`triggers` (`triggerid`) ON UPDATE RESTRICT ON DELETE CASCADE
)
COLLATE='utf8_bin'
ENGINE=I
< /code>
Поэтому я обнаружил, что если я выполнял запросы отдельно и соберите таблицы через PHP, который является языком, который я использую для создания панели панели, он гораздо более эффективен. Однако я работаю над корреляцией двух запросов в один, используя php. < /P>
Используя PHP, я делаю требование ниже: < /p>


Подробнее здесь: [url]https://stackoverflow.com/questions/67065335/how-to-perform-a-faster-query-on-mysql-from-zabbix[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»