La "mejor práctica" es:
- Mida el rendimiento, aislando el subsistema relevante lo mejor que pueda.
- Identifique la causa raíz del cuello de botella. ¿Está vinculado a E/S? CPU enlazado? ¿Límite de memoria? ¿Esperando en las cerraduras?
- Haga cambios para aliviar la causa raíz que descubrió.
- Mide de nuevo, para demostrar que solucionaste el cuello de botella y cuánto .
- Vaya al paso 2 y repita según sea necesario hasta que el sistema funcione lo suficientemente rápido.
Suscríbase a la fuente RSS en http://www.mysqlperformanceblog.com y lea también sus artículos históricos. Ese es un recurso muy útil para la sabiduría relacionada con el rendimiento. Por ejemplo, preguntó acerca de InnoDB frente a MyISAM. Su conclusión:InnoDB tiene un rendimiento un 30 % más alto que MyISAM en promedio. Aunque también hay algunos escenarios de uso en los que MyISAM supera a InnoDB.
Los autores de ese blog también son coautores de "High Performance MySQL", el libro mencionado por @Andrew Barnett.
Re comentario de @ʞɔıu:cómo saber si está vinculado a E / S versus vinculado a CPU versus limitado a memoria depende de la plataforma. El sistema operativo puede ofrecer herramientas como ps, iostat, vmstat o top. O es posible que deba obtener una herramienta de terceros si su sistema operativo no proporciona una.
Básicamente, cualquier recurso que esté vinculado al 100 % de utilización/saturación probablemente sea su cuello de botella. Si la carga de su CPU es baja pero su carga de E/S es máxima para su hardware, entonces está limitado a E/S.
Sin embargo, ese es solo un punto de datos. El remedio también puede depender de otros factores. Por ejemplo, una consulta SQL compleja puede estar ordenando un archivo y esto mantiene ocupada la E/S. ¿Debería lanzarle más hardware/más rápido, o debería rediseñar la consulta para evitar la ordenación de archivos?
Hay demasiados factores para resumir en una publicación de StackOverflow, y el hecho de que existan muchos libros sobre el tema lo respalda. Mantener las bases de datos operando de manera eficiente y haciendo el mejor uso de los recursos es un trabajo de tiempo completo que requiere habilidades especializadas y estudio constante.
Jeff Atwood acaba de escribir un buen artículo de blog sobre cómo encontrar cuellos de botella en un sistema: