Привет!
Активно пытаемся пользоваться zabbix и упёрлись в полную утилизацию базы нижеуказанным запросом. Судя по коду это zabbix dashboard и фильтрация проблем по правам доступа пользователя.
При помощи mysqldumpslow -s c mysql-slow.log >slowlog_analyse.txt выявлено, что база целый месяц прогружена с вот таким ужасным результатом: Количество исполнений: 168174, среднее время каждого запроса=78.26s, общее время всех этих запросов: 13161427s.
С подзапросом exists каждый этот запрос выполняется 1 min 21,29 sec, без - 3,67 sec. Запрос выплывает из API: zabbix/include/classes/api/services/CProblem.php. Как можно побороть проблему? В таблице problem всего 6408210 записей. Mysql на 22Гигах неутилизированной RAM, disk IO практически отсутствует (300 iops average при возможности писать 2000).
его explain:
Активно пытаемся пользоваться zabbix и упёрлись в полную утилизацию базы нижеуказанным запросом. Судя по коду это zabbix dashboard и фильтрация проблем по правам доступа пользователя.
При помощи mysqldumpslow -s c mysql-slow.log >slowlog_analyse.txt выявлено, что база целый месяц прогружена с вот таким ужасным результатом: Количество исполнений: 168174, среднее время каждого запроса=78.26s, общее время всех этих запросов: 13161427s.
С подзапросом exists каждый этот запрос выполняется 1 min 21,29 sec, без - 3,67 sec. Запрос выплывает из API: zabbix/include/classes/api/services/CProblem.php. Как можно побороть проблему? В таблице problem всего 6408210 записей. Mysql на 22Гигах неутилизированной RAM, disk IO практически отсутствует (300 iops average при возможности писать 2000).
Code:
Count: 168174 Time=78.26s (13161427s) Lock=0.00s (401s) Rows=3723.1 (626129450), 3users@4hosts
SELECT DISTINCT p.eventid,p.objectid,p.clock,p.ns
FROM problem p,functions f,items i,hosts_groups hg
WHERE
p.source='0'
AND p.object='0'
AND NOT EXISTS
(SELECT NULL FROM functions f,items i,hosts_groups hgg
LEFT JOIN rights r ON r.id=hgg.groupid AND r.groupid='?'
WHERE p.objectid=f.triggerid AND f.itemid=i.itemid AND i.hostid=hgg.hostid
GROUP BY i.hostid
HAVING MAX(permission)<2 OR MIN(permission) IS NULL OR MIN(permission)=0)
AND p.objectid=f.triggerid
AND f.itemid=i.itemid
AND i.hostid=hg.hostid
AND hg.groupid IN ('?','?','?')
AND p.r_eventid IS NULL
ORDER BY p.eventid DESC;
его explain:
Code:
+----+--------------------+-------+--------+-------------------------------+----------------+---------+--------------------------------+------+--------------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+-------+--------+-------------------------------+----------------+---------+--------------------------------+------+--------------------------------------------------------+ | 1 | PRIMARY | hg | range | hosts_groups_1,hosts_groups_2 | hosts_groups_2 | 8 | NULL | 2069 | Using index condition; Using temporary; Using filesort | | 1 | PRIMARY | i | ref | PRIMARY,items_1 | items_1 | 8 | zabbix.hg.hostid | 23 | Using index | | 1 | PRIMARY | f | ref | functions_1,functions_2 | functions_2 | 8 | zabbix.i.itemid | 1 | NULL | | 1 | PRIMARY | p | ref | problem_1,problem_3 | problem_1 | 16 | const,const,zabbix.f.triggerid | 3 | Using where | | 2 | DEPENDENT SUBQUERY | f | ref | functions_1,functions_2 | functions_1 | 8 | zabbix.p.objectid | 1 | Using temporary; Using filesort | | 2 | DEPENDENT SUBQUERY | i | eq_ref | PRIMARY,items_1 | PRIMARY | 8 | zabbix.f.itemid | 1 | NULL | | 2 | DEPENDENT SUBQUERY | hgg | ref | hosts_groups_1 | hosts_groups_1 | 8 | zabbix.i.hostid | 1 | Using index | | 2 | DEPENDENT SUBQUERY | r | ref | rights_1,rights_2 | rights_2 | 8 | zabbix.hgg.groupid | 2 | Using where | +----+--------------------+-------+--------+-------------------------------+----------------+---------+--------------------------------+------+--------------------------------------------------------+
Comment