Mysql
 sql >> Database >  >> RDS >> Mysql

Best practice per l'ottimizzazione del database MySQL

La "migliore pratica" è:

  1. Misurare le prestazioni, isolando il sottosistema pertinente nel miglior modo possibile.
  2. Identifica la causa principale del collo di bottiglia. Sei legato a I/O? vincolato alla CPU? Memoria vincolata? In attesa di serrature?
  3. Apporta modifiche per alleviare la causa principale che hai scoperto.
  4. Misura ancora, per dimostrare che hai risolto il collo di bottiglia e di quanto .
  5. Vai al passaggio 2 e ripeti se necessario finché il sistema non funziona abbastanza velocemente.

Iscriviti al feed RSS su http://www.mysqlperformanceblog.com e leggi anche i suoi articoli storici. Questa è una risorsa estremamente utile per la saggezza relativa alle prestazioni. Ad esempio, hai chiesto informazioni su InnoDB e MyISAM. La loro conclusione:InnoDB ha in media prestazioni superiori del 30% circa rispetto a MyISAM. Sebbene ci siano anche alcuni scenari di utilizzo in cui MyISAM supera InnoDB.

Gli autori di quel blog sono anche coautori di "High Performance MySQL", il libro citato da @Andrew Barnett.

Commento di @ʞɔıu:come sapere se sei legato a I/O rispetto a vincolato alla CPU rispetto a vincolato alla memoria dipende dalla piattaforma. Il sistema operativo può offrire strumenti come ps, iostat, vmstat o top. Oppure potresti dover ottenere uno strumento di terze parti se il tuo sistema operativo non ne fornisce uno.

Fondamentalmente, è probabile che qualunque risorsa sia ancorata al 100% di utilizzo/saturazione sia il tuo collo di bottiglia. Se il carico della tua CPU è basso ma il carico di I/O è al massimo per il tuo hardware, allora sei legato all'I/O.

Questo è solo un punto dati, tuttavia. Il rimedio può dipendere anche da altri fattori. Ad esempio, una query SQL complessa potrebbe eseguire un filesort e ciò mantiene occupato l'I/O. Dovresti lanciare più hardware / più veloce o dovresti riprogettare la query per evitare il filesort?

Ci sono troppi fattori da riassumere in un post di StackOverflow e il fatto che esistano molti libri sull'argomento lo supporta. Mantenere i database operativi in ​​modo efficiente e utilizzare al meglio le risorse è un lavoro a tempo pieno che richiede competenze specialistiche e studio costante.

Jeff Atwood ha appena scritto un bell'articolo sul blog sulla ricerca di colli di bottiglia in un sistema: