Ad Widget

Collapse

И снова про производительность. Zabbix 1.8.2 и mysql innodb

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mschedrin
    Senior Member
    • Jun 2009
    • 179

    #46
    Проверил, все индексы на месте.
    Вспомнил, что у меня есть ряд скриптов, которые работают с базой напрямую. Возможно они что-то выполняют некорректно, после чего база начинает плохо работать. Завтра попробую в этом разобраться.

    Comment

    • mschedrin
      Senior Member
      • Jun 2009
      • 179

      #47
      Нашел тяжелые запросы, все они выглядят вот так:
      Code:
      # Time: 100421 14:03:32
      # User@Host: zabbix[zabbix] @ localhost []
      # Query_time: 101  Lock_time: 0  Rows_sent: 83371  Rows_examined: 253038
      select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 000000000000000 and 099999999999999 order by i.itemid;
      Такой запрос заставляет mysql создать два временных файла размером по почти 500Мб. Естественно он выполняется очень долго. Вот так выглядят файлы:
      Code:
      #sql_111b1_0.MYD                       |489723K
      #sql_111b1_1.MYD                       |489723K|
      Explain:
      Code:
      mysql> explain select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 000000000000000 and 099999999999999 order by i.itemid;
      +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
      | id | select_type | table | type | possible_keys           | key     | key_len | ref             | rows | Extra                           |
      +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
      |  1 | SIMPLE      | h     | ref  | PRIMARY,hosts_2         | hosts_2 | 4       | const           | 1173 | Using temporary; Using filesort | 
      |  1 | SIMPLE      | i     | ref  | PRIMARY,items_1,items_3 | items_1 | 8       | zabbix.h.hostid |   14 | Using where                     | 
      +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
      2 rows in set (0.00 sec)
      Если отключить order by то temporary не используется и запрос выполняется быстро.
      Last edited by mschedrin; 21-04-2010, 11:54.

      Comment

      • den_crane
        Senior Member
        • Feb 2006
        • 272

        #48
        Code:
        1 	SIMPLE 	h 	ref 	PRIMARY,hosts_2,hosts_4 	hosts_2 	4 	const 	106 	Using index; Using temporary; Using filesort
        1 	SIMPLE 	i 	ref 	PRIMARY,items_1,items_3,items_test2 	items_1 	8 	zabbix.h.hostid 	15 	Using where

        меняю h.status in (0) на h.status+0 in (0) и filesort исчезает
        Code:
        id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
        1 	SIMPLE 	i 	range 	PRIMARY,items_1,items_3,items_test2 	PRIMARY 	8 	NULL 	1957 	Using where
        1 	SIMPLE 	h 	eq_ref 	PRIMARY 	PRIMARY 	8 	zabbix.i.hostid 	1 	Using where

        Comment

        • mschedrin
          Senior Member
          • Jun 2009
          • 179

          #49
          Originally posted by den_crane
          Code:
          1 	SIMPLE 	h 	ref 	PRIMARY,hosts_2,hosts_4 	hosts_2 	4 	const 	106 	Using index; Using temporary; Using filesort
          1 	SIMPLE 	i 	ref 	PRIMARY,items_1,items_3,items_test2 	items_1 	8 	zabbix.h.hostid 	15 	Using where

          меняю h.status in (0) на h.status+0 in (0) и filesort исчезает
          Code:
          id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
          1 	SIMPLE 	i 	range 	PRIMARY,items_1,items_3,items_test2 	PRIMARY 	8 	NULL 	1957 	Using where
          1 	SIMPLE 	h 	eq_ref 	PRIMARY 	PRIMARY 	8 	zabbix.i.hostid 	1 	Using where
          Во-первых, это костыль
          Во-вторых, где это поменять? Я пока не знаю zabbix_server этот запрос инициирует или веб интерфейс?

          Comment

          • den_crane
            Senior Member
            • Feb 2006
            • 272

            #50
            Originally posted by mschedrin
            Во-первых, это костыль
            Во-вторых, где это поменять?
            оптимизатор у мускуля тупой не понимает что h.status in (0) это практически вся таблица, переходите на postgre

            Comment

            • mschedrin
              Senior Member
              • Jun 2009
              • 179

              #51
              Originally posted by den_crane
              оптимизатор у мускуля тупой не понимает что h.status in (0) это практически вся таблица, переходите на postgre
              Вы баг на этот счет не открывали?
              Вы знаете где в исходиках можно поменять этот запрос? Или вы просто перешли на postgre?

              Comment

              • den_crane
                Senior Member
                • Feb 2006
                • 272

                #52
                Originally posted by mschedrin
                Вы баг на этот счет не открывали?
                нет.

                Originally posted by mschedrin
                Вы знаете где в исходиках можно поменять этот запрос?
                не знаю, обычно я ищу grep-м, минут 10-ть уходит на это.

                Originally posted by mschedrin
                Или вы просто перешли на postgre?
                я собирался, даже тестировал переход, но довел до состояния cpu idle 98%, и как-то мне лень стало дергаться.

                Comment

                • ugh
                  Senior Member
                  • Jun 2009
                  • 296

                  #53
                  а почему у меня все хорошо?
                  почему план запроса разный?
                  хостов/итемов ведь сравнимое количество

                  Comment

                  • mschedrin
                    Senior Member
                    • Jun 2009
                    • 179

                    #54
                    Originally posted by ugh
                    а почему у меня все хорошо?
                    почему план запроса разный?
                    хостов/итемов ведь сравнимое количество
                    А почему вы думаете, что всё хорошо?
                    Попробуйте выполнить подобный запрос:
                    Code:
                    select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 000000000000000 and 099999999999999 order by i.itemid;
                    Сколько времени он будет выполняться?
                    Что скажет explain для этого запроса?

                    Comment

                    • ugh
                      Senior Member
                      • Jun 2009
                      • 296

                      #55
                      пост номер 31
                      чудно вы, вашу же ветку читаете)))

                      Comment

                      • mschedrin
                        Senior Member
                        • Jun 2009
                        • 179

                        #56
                        Originally posted by ugh
                        пост номер 31
                        чудно вы, вашу же ветку читаете)))
                        У Вас другой запрос, у меня between от нуля начинается, а у вас:
                        Code:
                        ... between 800800000010001 and 099999999999999999 order by i.itemid;

                        Comment

                        • mschedrin
                          Senior Member
                          • Jun 2009
                          • 179

                          #57
                          Открыл баг: https://support.zabbix.com/browse/ZBX-2363

                          Comment

                          • ugh
                            Senior Member
                            • Jun 2009
                            • 296

                            #58
                            ... between 800800000010001 and 099999999999999999 order by i.itemid;
                            не суть, ид итема меньше 800800000010001 все равно нет)))

                            Comment

                            • mschedrin
                              Senior Member
                              • Jun 2009
                              • 179

                              #59
                              Originally posted by ugh
                              ... between 800800000010001 and 099999999999999999 order by i.itemid;
                              не суть, ид итема меньше 800800000010001 все равно нет)))
                              Code:
                              mysql> explain select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 800800000010001 and 099999999999999999 order by i.itemid;
                              +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+------+-------------+
                              | id | select_type | table | type   | possible_keys           | key     | key_len | ref             | rows | Extra       |
                              +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+------+-------------+
                              |  1 | SIMPLE      | i     | range  | PRIMARY,items_1,items_3 | PRIMARY | 8       | NULL            |    1 | Using where | 
                              |  1 | SIMPLE      | h     | eq_ref | PRIMARY,hosts_2         | PRIMARY | 8       | zabbix.i.hostid |    1 | Using where | 
                              +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+------+-------------+
                              2 rows in set (0.00 sec)
                              Code:
                              mysql> explain select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 0 and 099999999999999999 order by i.itemid;             +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
                              | id | select_type | table | type | possible_keys           | key     | key_len | ref             | rows | Extra                           |
                              +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
                              |  1 | SIMPLE      | h     | ref  | PRIMARY,hosts_2         | hosts_2 | 4       | const           | 1663 | Using temporary; Using filesort | 
                              |  1 | SIMPLE      | i     | ref  | PRIMARY,items_1,items_3 | items_1 | 8       | zabbix.h.hostid |   11 | Using where                     | 
                              +----+-------------+-------+------+-------------------------+---------+---------+-----------------+------+---------------------------------+
                              2 rows in set (0.00 sec)
                              Видите разницу?

                              Comment

                              • ugh
                                Senior Member
                                • Jun 2009
                                • 296

                                #60
                                Code:
                                explain select i.itemid,i.hostid,h.proxy_hostid,i.type,i.data_type,i.value_type,i.key_,i.snmp_community,i.snmp_oid,i.snmp_port,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.ipmi_sensor,i.delay,i.delay_flex,i.trapper_hosts,i.logtimefmt,i.params,i.status,i.authtype,i.username,i.password,i.publickey,i.privatekey from items i,hosts h where i.hostid=h.hostid and h.status in (0) and i.status in (0,3) and i.itemid between 800800000000000 and 099999999999999999 order by i.itemid;
                                +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+-------+-------------+
                                | id | select_type | table | type   | possible_keys           | key     | key_len | ref             | rows  | Extra       |
                                +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+-------+-------------+
                                |  1 | SIMPLE      | i     | range  | PRIMARY,items_1,items_3 | PRIMARY | 8       | NULL            | 87704 | Using where |
                                |  1 | SIMPLE      | h     | eq_ref | PRIMARY,hosts_2         | PRIMARY | 8       | zabbix.i.hostid |     1 | Using where |
                                +----+-------------+-------+--------+-------------------------+---------+---------+-----------------+-------+-------------+
                                2 rows in set (0.01 sec)

                                Comment

                                Working...