Asumiendo un sistema OLTP de producción con tablas predominantemente InnoDB
- ¿Cuáles son los síntomas comunes de un sistema mal configurado / mal configurado?
- ¿Qué parámetros de configuración cambia más comúnmente de sus valores predeterminados?
- ¿Cómo detecta posibles cuellos de botella antes de que haya un problema?
- ¿Cómo reconoce y resuelve los problemas activos?
Cualquier anécdota que detalle status
variables específicas y diagnósticos sería apreciada.
mysql
performance
innodb
Riedsio
fuente
fuente
Respuestas:
Aquí hay un buen artículo sobre la optimización de InnoDB de Jenny Chen de Sun: escribe mucho sobre MySQL, parte es específico de Solaris (por ejemplo, usando DTrace ) pero todo el blog está lleno de datos interesantes.
fuente
Curiosamente, en MySQL 5.5, ahora puede tener múltiples grupos de búferes innodb.
Los parámetros que le interesan son
En aproximadamente un mes, estoy programado para implementar 112 grupos de búferes innodb para un cliente. Te diré cómo te fue.
ACTUALIZACIÓN 2011-02-27 21:57 EDT
Descubrí que el valor máximo para innodb_buffer_pool_instances es 64 Decidí configurar 144 GB, así que configuré innodb_buffer_pool_instances en 18 e innodb_buffer_pool_size en 8. Actualmente estoy cargando el servidor con 450 GB
ACTUALIZACIÓN 2011-04-28 13:44 EDT
Probé varios InnoDB Buffer Pools. Había demasiado enhebrado de bloqueo y contención. Cambié a un único grupo de búfer de 162 GB + configuración de read_io_threads y write_io_threads a 64 (valor máximo). Esto funcionó mucho mejor.
ACTUALIZACIÓN 2012-07-03 17:27 EDT
Aprendí algo sorprendente sobre MySQL. Si asigna un único conjunto de búferes InnoDB monolítico que es más grande que el total instalado dividido por el número de CPU físicas , incitará al sistema operativo a intercambiar la memoria a intervalos regulares debido a un conjunto de búferes InnoDB completo. La opción de MySQL 5.5 conocida como innodb_buffer_pool_instances se puede usar para dividir el grupo de búferes. Ayer, implementé esto correctamente para el cliente que mencioné en mi respuesta el año pasado. Todavía tengo 162GB para el Buffer Pool del cliente. He configurado la opción innodb_buffer_pool_instances del servidor en 2 porque cada servidor de base de datos es hexacore dual. Estaba pensando en configurarlo en 12, pero un colega me mostró un blog de Jeremy Cole sobre MySQL y Swappiness.. Después de leerlo, lo puse en práctica inmediatamente para mi cliente. Ejecuté este comando
Vi una asignación de 192 GB de RAM del servidor como 96 GB a cada núcleo físico. Por lo tanto, configuré innodb_buffer_pool_instances en 2. Las cosas se ven bien en este momento. Actualizaré mi respuesta para ver cómo esto afecta el intercambio de memoria para los próximos 2 meses.
fuente
Es posible que desee explorar los siguientes recursos:
fuente
En primer lugar, aumente el tamaño predeterminado de InnoDB Buffer Pool Size en my.cnf (creo que está predeterminado en 8 MB)
Probablemente debería configurar esto al 75% de su tamaño de RAM (en general)
fuente
configuración de memoria
fuente