Ad Widget

Collapse

Zabbix dashboard: mysql жрёт 100% всех процов сервера проверками прав

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pupkin.ivan
    Member
    • Aug 2013
    • 51

    #1

    Zabbix dashboard: mysql жрёт 100% всех процов сервера проверками прав

    Привет!
    Активно пытаемся пользоваться 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                                            |
    +----+--------------------+-------+--------+-------------------------------+----------------+---------+--------------------------------+------+--------------------------------------------------------+
    Last edited by pupkin.ivan; 19-04-2018, 13:22.
  • pupkin.ivan
    Member
    • Aug 2013
    • 51

    #2
    применили workaround, закомментировав излишнюю проверку прав на события в zabbix/include/classes/api/services/CProblem.php. Нагрузка на сервер упала в 5 раз. Костыль, но беглый просмотр не заметил подвоха, который был бы нам критичен.
    Code:
    // all triggers
    // else {
    //         $sqlParts['where'][] = 'NOT EXISTS ('.
    //                 'SELECT NULL'.
    //                 ' FROM functions f,items i,hosts_groups hgg'.
    //                         ' LEFT JOIN rights r'.
    //                                 ' ON r.id=hgg.groupid'.
    //                                         ' AND '.dbConditionInt('r.groupid', getUserGroupsByUserId($>
    //                 ' WHERE p.objectid=f.triggerid'.
    //                         ' AND f.itemid=i.itemid'.
    //                         ' AND i.hostid=hgg.hostid'.
    //                 ' GROUP BY i.hostid'.
    //                 ' HAVING MAX(permission)<'.($options['editable'] ? PERM_READ_WRITE : PERM_READ).
    //                         ' OR MIN(permission) IS NULL'.
    //                         ' OR MIN(permission)='.PERM_DENY.
    //                 ')';
    // }
    
    [B][/B]



    Comment

    Working...