Ad Widget

Collapse

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

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

    #1

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

    Читал много тем в форуме про оптимизацию производительности mysql и zabbix_server. Ответа на свои вопросы так и не получил.
    Испытываю проблемы с производительнотью на сервере, где работают mysql и zabbix.
    Сервер сейчас выглядит так:
    Code:
    Zabbix server is running	Yes	- 
    Number of hosts (monitored/not monitored/templates)	2886	2860 / 2 / 24
    Number of items (monitored/disabled/not supported)	82078	81918 / 10 / 150
    Number of triggers (enabled/disabled)[true/unknown/false]	78724	78720 / 4  [4 / 36 / 78680]
    Number of users (online)	23	10
    Required server performance, new values per second	202.8623	-
    Вся база данных заббикса весит 1,7 Гб

    Узким местом в системе является скорость работы базы данных с жестким диском. HDD самый обыкновенный, без raid. На него постоянно что-то пишется и с него что-то читается. Казалось бы, требуемая производительность сервера 202 значения в секунду - совсем немного. Непонятно, откуда такая активность на жестком диске. То ли я всё-таки innodb неверно настроил, то ли zabbix как-то неправильно с ним работает.
    Поделитесь опытом, наблюдаете ли вы подобное у себя?
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Могу рассказать, как я оптимизировал MySQL
    Под MySQL используется отдельная 64-битная машина, 8 Gb оперативной памяти, Raid 1+0 на 4-х физических дисках SAS 10k rpm.
    Опция /etc/my.cnf
    innodb_file_per_table
    default_table_type = INNODB
    Каждая таблица в отдельном файле. (работает при создании новой таблицы)
    Способы перевода таблиц в отдельный файл
    1) Перенос данных
    CREATE TABLE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table; DROP TABLE old_table; RENAME TABLE new_table to old_table;
    2) Через dump файл
    Сделать полный dump
    mysqldump -u root -ppassword zabbix
    mysql> drop database zabbix;
    cat dump.sql | mysql -u root -ppassword zabbix

    Далее использовал скрипты
    Скрипт для оптимизации параметров MySQL



    Apibet Link Slot88 Rekomendasi Google 2025 Berita Jackpot Masa Depan serta harian slot gacor terbaik hingga winrate rtp tertinggi, klik link daftar untuk menuju situs Apibet.

    mysqltuner.pl



    И делал тонкую настройку.
    Last edited by dima_dm; 14-04-2010, 16:08.

    Comment

    • mschedrin
      Senior Member
      • Jun 2009
      • 179

      #3
      innodb_file_per_table есть. Тюнинг innodb тоже проводил скриптом tuning-primer.sh.
      Убивают вот такие запросы в slow query log:
      Code:
      # Time: 100413 20:31:13
      # User@Host: zabbix[zabbix] @ localhost []
      # Query_time: 3731  Lock_time: 0  Rows_sent: 80784  Rows_examined: 245941
      SELECT i.itemid,i.lastclock,i.description,i.key_,i.type,h.host,h.hostid,h.proxy_hostid,i.delay,i.delay_flex FROM items i,hosts h WHERE i.hostid=h.hostid AND h.status=0 AND i.sta
      tus=0 AND i.value_type not in (2) AND i.key_ NOT IN ('status','zabbix[log]') AND NOT i.lastclock IS NULL AND ( i.type in (7,13,14,3,5,8,10,15) OR (h.available<>2 AND i.type in (
      0)) OR (h.snmp_available<>2 AND i.type in (1,4,6)) OR (h.ipmi_available<>2 AND i.type in (12))) AND  (h.hostid IN (10404,10403,10470,10449,16600,14880,17377,16651,17730,14856,14
      886,16650,10390,17726,10412,10391,10401
      ... <очень много цифр>
      16114,16139) OR h.hostid IN (15439,17158,14972,15951,14979,14985,14984,15938,14986))  AND ((h.hostid  BETWEEN
       000000000000000 AND 099999999999999)) ORDER BY i.lastclock,h.host,i.description,i.key_;
      Вот такой запрос занял 3731 секунд. Mysql копирует его во временную таблицу, видимо это занимает очень много времени. Вопрос в том - это запросы неоптимальные или у меня что-то в mysql не так настроено?

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Может у вас физической памяти мало? И идёт активный swap. Соберите статистику по использованию диска (так http://www.zabbix.com/forum/showthread.php?t=16604) и свопированию. Посмотрите iowait статистику. Недавно мой коллега проводил нагрузочные тесты на SunFire V210 (у него тоже нет аппаратного Raid) Zabbix 1.8.2 + MySQL innodb_file_per_table, он тоже производительность больше 220 значений в секунду получить не смог.

        Comment

        • mschedrin
          Senior Member
          • Jun 2009
          • 179

          #5
          Смотрю работу с диском в реальном времени с помощью утилиты gstat, там отчетливо видно, что дисковые операции в основном идут с разделом где лежит mysql база. В своп ничего не пишется, хватает оперативной памяти.

          Comment

          • mschedrin
            Senior Member
            • Jun 2009
            • 179

            #6
            Ну хорошо, допустим я поставлю рэйд, это увеличит скорость чтения и записи на диск в 4 раза. Время медленного запроса уменьшится в 4 раза:
            3731/4 = 932 секунды. Это ведь абсолютно ненормально время для выполнения запросов!

            Comment

            • oalex
              Member
              • Jul 2009
              • 86

              #7
              вот не факт, что рейд ускорит, если рейд 5 да без дополнительного кэширования - на запись тормозить сильнее будет чем просто винт или зеркало

              Comment

              • mschedrin
                Senior Member
                • Jun 2009
                • 179

                #8
                Как же тогда другие пользователи zabbix решают подобные проблемы с производительностью?
                Last edited by mschedrin; 15-04-2010, 11:57.

                Comment

                • oalex
                  Member
                  • Jul 2009
                  • 86

                  #9
                  распределенной системой мб ?
                  у тебя 82к итемсов уверен что все на нужно одной машине? (хотя кто ее знает - твою структуру).
                  у меня до 70 доходило.. но как то забил на этих "попугаев"... реально помогло увеличение кэша для INNODB до 2гигов (моя база была 1.8-2Г), т.к. по умолчанию всего 8метров было (как раз mysqlreport и показал).
                  Скорость увеличилась работы.. но значение "попугаев" не изменилось

                  Comment

                  • mschedrin
                    Senior Member
                    • Jun 2009
                    • 179

                    #10
                    Originally posted by oalex
                    распределенной системой мб ?
                    у тебя 82к итемсов уверен что все на нужно одной машине? (хотя кто ее знает - твою структуру).
                    у меня до 70 доходило.. но как то забил на этих "попугаев"... реально помогло увеличение кэша для INNODB до 2гигов (моя база была 1.8-2Г), т.к. по умолчанию всего 8метров было (как раз mysqlreport и показал).
                    Скорость увеличилась работы.. но значение "попугаев" не изменилось
                    У меня всего два гига памяти на сервере, под кэш innodb выделено 1,5 гига. Если кэш будет превышать размер базы, то она теоретически должна вся влезть в этот кэш?

                    По поводу распределенной системы. Что распределять то? Базу данных? Кластер делать?

                    Comment

                    • ugh
                      Senior Member
                      • Jun 2009
                      • 296

                      #11
                      поищите на форуме, десятки топиков о производительности мускуля
                      ну например, можно посоветовать для mysql-tmp сделать в памяти раздел

                      Comment

                      • mschedrin
                        Senior Member
                        • Jun 2009
                        • 179

                        #12
                        Originally posted by ugh
                        поищите на форуме, десятки топиков о производительности мускуля
                        ну например, можно посоветовать для mysql-tmp сделать в памяти раздел
                        В каком разделе лучше искать в русском или английском?
                        Спасибо за совет, попробую.
                        Last edited by mschedrin; 15-04-2010, 13:04.

                        Comment

                        • oalex
                          Member
                          • Jul 2009
                          • 86

                          #13
                          " mschedrin "Yesterday, 12:40"
                          вместо букв - набор непонятных символов, пост прочитать не могу
                          Last edited by oalex; 16-04-2010, 04:15.

                          Comment

                          • mschedrin
                            Senior Member
                            • Jun 2009
                            • 179

                            #14
                            В каком разделе лучше искать в русском или английском?
                            Спасибо за совет, попробую.

                            Comment

                            • den_crane
                              Senior Member
                              • Feb 2006
                              • 272

                              #15
                              вообще 202 в секунду это мягко говоря дохрена. sar -d 1 20 бы увидеть.
                              А чего база такая маленькая? Время хранения маленькое?

                              а конфиг мускуля где? Сколько памяти вы ему отдали?

                              Вообще что конкретно волнует? Тот долгий запрос? Или чего? Я так понимаю что тот запрос из фронтэнда? Зачем он вам?

                              Comment

                              Working...