Il "best practice" è:
- Misurare le prestazioni, isolare il sottosistema così come si può.
- Identificare la causa principale del collo di bottiglia. Sei collegato I/O? CPU vincolata? Legato alla memoria? In attesa di serrature?
- Apporta le modifiche per alleviare la causa principale che hai scoperto.
- Misurare nuovamente, per dimostrare che è stato risolto il collo di bottiglia e di quanto.
- Passare al punto 2 e ripetere se necessario finché il sistema non funziona abbastanza velocemente.
Iscriviti al feed RSS allo http://www.mysqlperformanceblog.com e leggi anche i suoi articoli storici. Questa è una risorsa estremamente utile per la saggezza legata alle prestazioni. Ad esempio, hai chiesto informazioni su InnoDB e MyISAM. La loro conclusione: InnoDB ha prestazioni del ~ 30% in più rispetto al MyISAM in media. Sebbene ci siano anche alcuni scenari di utilizzo in cui MyISAM supera Outno in InBob.
Gli autori di questo blog sono anche co-autori di "High Performance MySQL", il libro di cui parla @Andrew Barnett.
Re commento da @ ʞɔıu: come dire se sei O bound rispetto CPU bound rispetto della memoria legato I/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, qualsiasi risorsa è ancorata al 100%, l'utilizzo/saturazione è probabilmente il collo di bottiglia. Se il carico della CPU è basso ma il carico di I/O è al massimo per l'hardware, allora sei vincolato 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 l'I/O occupato. Dovresti gettare hardware più/più veloce, o dovresti riprogettare la query per evitare il filesort?
Ci sono troppi fattori da riepilogare in un post di StackOverflow e il fatto che molti libri esistano 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 specializzate e studio costante.
Jeff Atwood ha appena scritto un bel articolo del blog di trovare i colli di bottiglia in un sistema:
fonte
2009-02-23 22:09:45
un unico grande motivo per andare con il motore INNODB - è il supporto delle transazioni. MyIsam non supporta questo. Se ti interessa la tua integrità dei dati (come dovresti :)) - semplicemente non c'è altro modo.non è possibile ripristinare in modo affidabile la sequenza sql se non si utilizzano transazioni e se qualcosa di brutto è successo come un'interruzione dell'alimentazione. – Stann