Mysql
 sql >> база данни >  >> RDS >> Mysql

Най-добрият инструмент за настройка на производителността на MySQL?

Лошата новина:има GUI инструменти, които да помогнат с това, но това е квалифицирана и широка работа. Така че те не покриват всичко, вероятно ще трябва да използвате неща от командния ред/sql оператори и т.н., за да помогнете. Наистина използвах само инструментите на командния ред. Ще дам кратък преглед на нещата, които знам/използвал съм:

Първо, имате нужда от добър дизайн на база данни. Ако дизайнът е лош, можете да стигнете само дотук. Това включва нормализиране, както и използване на подходящи типове за полета. Ще оставя тази точка тук, тъй като мисля, че е малко настрана, а не това, което търсите.

Уверете се, че MySQL Query Cache е настроен и работи и му дайте малко повече RAM, ако можете, и се уверете, че вашите важни заявки не правят нищо, което пречи на mysql да ги кешира. Например, използването на функцията NOW() в заявките прави това - по очевидни причини - СЕГА се променя всяка секунда! Вместо това можете да поставите клеймо за време в sql и да използвате времето до най-близката минута/час/ден (най-големият период, с който можете да се разминете), за да позволите на mysql да получи някаква полза от кеширането.

За да започнете да оптимизирате нещата:Залепването на "EXPLAIN" пред select е начинът да видите как се изпълнява заявката и да определите как да я подобрите. Научете се да интерпретирате изхода:http://dev.mysql .com/doc/refman/5.0/en/using-explain.html Често ще можете да добавяте нови индекси/добавяйте колони към съществуващите, за да подобрите нещата. Но също така ще срещнете моменти, когато заявките трябва да бъдат преструктурирани.

Да започнете да подобрявате производителността с MySQL (ако приемем, че все още не знаете каква е проблемната заявка) е да проверите бавния дневник на заявките – той записва във файл, всички заявки отнемат повече от x секунди.

Общ преглед, включително конфигурация за, ако вече не регистрира това, е тук:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - Открих също, че задаване на long_query_time на 0 за ден или нещо, така че всички заявки да се регистрират тук с отнето време, е полезен начин да получите представа къде точно върви изпълнението. Но не бих отишла там веднага! И не го оставяйте включен, трупите могат да станат масивни.

След като имате няколко дни за регистриране, открих mysqlsla (mysql бавен лог анализатор) от тук:http://hackmysql.com/mysqlsla е добър инструмент.

Той може да направи повече от просто бавен анализ на дневника на заявките - прочетете ръководството. Но за да обясня какво прави за бавни регистрационни файлове:бавният регистър на заявките може да съдържа много данни, така че може да е трудно да се разбере кои заявки са най-скъпите като цяло - напр.:вземете предвид колко пъти се изпълняват и кога две заявки всъщност са едни и същи с различен идентификатор в клауза where.

MySQL sla прави всичко това вместо вас. Той преминава през дневника и може да групира заявки, които са еднакви/има различни стойности в клаузите where. След това ви представя (по подразбиране) първите 10 заявки по отношение на общото време за изпълнение - което често има някои изненади, но обикновено е най-продуктивната отправна точка - вземете най-скъпата заявка и използвайте EXPLAIN върху нея и вижте дали можете да подобрите го.

Някои заявки отнемат много време и не могат лесно да бъдат подобрени. В този случай можете ли да получите данните по друг начин или поне да ги кеширате? Може дори да откриете, че е необходима промяна на DB схемата. По същия начин някои заявки може да са в горната част на изхода на mysqlsla, защото ги изпълнявате много (особено вярно, ако long_query_time е настроен на 0), дори и да се изпълняват доста бързо. Може би е време да добавите малко кеширане към приложението си?

http://www.maatkit.org/ също изглежда обещаващо - никога не съм го използвал, но инструментът mk-query-profiler би трябвало да е полезен за по-нататъшно разглеждане защо заявките се забавят.

Съвсем отделно нещо, което също трябва да разгледате:страницата "състояние" в PHPMYADMIN (или можете да стартирате всички заявки, за да генерирате тази информация ....) - тя подчертава нещата, които смята, че може да са лоши в червено и може да ви помогне вижте къде може да се възползвате от разпределянето на системни ресурси. Не знам толкова много по въпроса - моят подход винаги е бил, че ако нещо е червено и изглежда зле, да отида и да прочета за него и да реша дали е важно и дали трябва да направя нещо (обикновено означава да разпределя повече ресурси за MySQL чрез промяна на конфигурацията).

Наскоро открих, че стартирането на SHOW PROCESSLIST може да бъде полезно и на сървър, който страда. Въпреки че ви дава само информация на живо (е, моментна снимка на живо), може да ви помогне да усетите какво се случва в даден момент, особено ако опресните няколко пъти и наблюдавате промените. Наскоро забелязах сървър, използващ всяка налична mysql връзка за изпълнение на идентична заявка, използвайки този метод. Разбира се, това би било в бавния регистър на заявките, но това е наистина бърз и очевиден начин да видите какво става.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Операнд трябва да съдържа 1 колона - MySQL НЕ В

  2. Изберете от всички таблици

  3. Най-добрият начин за съхраняване на подредени списъци в база данни?

  4. Прехвърлянията на отдалечена mySQL връзка не могат да се свържат с MySQL 4.1+, като се използва старата несигурна грешка при удостоверяване от XAMPP

  5. Поддръжка на естествен JSON в MYSQL 5.7:какви са предимствата и недостатъците на типа данни JSON в MYSQL?