La "migliore pratica" è:
- Misurare le prestazioni, isolando il sottosistema pertinente nel miglior modo possibile.
- Identifica la causa principale del collo di bottiglia. Sei legato a I/O? vincolato alla CPU? Memoria vincolata? In attesa di serrature?
- Apporta modifiche per alleviare la causa principale che hai scoperto.
- Misura ancora, per dimostrare che hai risolto il collo di bottiglia e di quanto .
- 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: