sql >> Database >  >> RDS >> Mysql

Best practices voor MySQL-databaseoptimalisatie

De "best practice" is:

  1. Meet de prestaties door het relevante subsysteem zo goed mogelijk te isoleren.
  2. Identificeer de hoofdoorzaak van het knelpunt. Ben je I/O-gebonden? CPU gebonden? Geheugen gebonden? Wachten op sloten?
  3. Breng wijzigingen aan om de hoofdoorzaak die je hebt ontdekt te verminderen.
  4. Meet nogmaals om aan te tonen dat je het knelpunt hebt opgelost en met hoeveel .
  5. Ga naar stap 2 en herhaal zo nodig totdat het systeem snel genoeg werkt.

Abonneer u op de RSS-feed op http://www.mysqlperformanceblog.com en lees ook de historische artikelen. Dat is een enorm nuttige bron voor prestatiegerelateerde wijsheid. U vroeg bijvoorbeeld naar InnoDB versus MyISAM. Hun conclusie:InnoDB presteert gemiddeld ~30% beter dan MyISAM. Hoewel er ook een paar gebruiksscenario's zijn waarin MyISAM beter presteert dan InnoDB.

De auteurs van die blog zijn ook co-auteurs van "High Performance MySQL", het boek dat wordt genoemd door @Andrew Barnett.

Re commentaar van @ʞɔıu:Hoe u kunt zien of u I/O-gebonden bent versus CPU-gebonden versus geheugengebonden, is afhankelijk van het platform. Het besturingssysteem kan tools bieden zoals ps, iostat, vmstat of top. Of misschien moet u een hulpprogramma van derden aanschaffen als uw besturingssysteem er geen biedt.

Kortom, welke resource ook is gekoppeld aan 100% gebruik / verzadiging, is waarschijnlijk uw knelpunt. Als uw CPU-belasting laag is, maar uw I/O-belasting maximaal is voor uw hardware, dan bent u I/O-gebonden.

Dat is echter slechts één gegevenspunt. De remedie kan ook afhankelijk zijn van andere factoren. Een complexe SQL-query kan bijvoorbeeld een filesort uitvoeren en dit houdt I/O bezig. Moet je er meer/snellere hardware tegenaan gooien, of moet je de query opnieuw ontwerpen om de bestandssortering te vermijden?

Er zijn te veel factoren om samen te vatten in een StackOverflow-bericht, en het feit dat er veel boeken over dit onderwerp bestaan, ondersteunt dit. Databases efficiënt laten werken en optimaal gebruik maken van de middelen is een fulltime baan die gespecialiseerde vaardigheden en constante studie vereist.

Jeff Atwood schreef zojuist een mooi blogartikel over het vinden van knelpunten in een systeem:



  1. SQL Server Agent-taken lokaliseren in Azure Data Studio

  2. Correct gebruik van php mysqli autocommit en rollback

  3. Een string omkeren in SQL en PL/SQL Een voorbeeld

  4. Wat te doen als u geen fouten in het gedeelde objectbestand krijgt wanneer u de OCI-versie Easysoft Oracle ODBC-stuurprogramma gebruikt?