¿Cómo se ajusta MySQL para una gran carga de trabajo de InnoDB?

39

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 statusvariables específicas y diagnósticos sería apreciada.

Riedsio
fuente
2
Esta pregunta es terriblemente amplia. ¿Puedes dividirlo en 4 preguntas? (E incluso sus preguntas con viñetas son increíblemente amplias. ¿Puede instanciarlas con sus problemas específicos?)
Brian Ballsun-Stanton

Respuestas:

16

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.

Gayo
fuente
44
Quien es Jenny Chen?
Pacerier
19

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

numactl --hardware

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.

RolandoMySQLDBA
fuente
hola @RolandoMySQLDBA, de los blogs de jeremy. No puedo encontrar ninguna conexión o conclusión que establezca una instancia innodb igual al número de CPU físicas que resolverán el problema de intercambio. ¿Múltiples instancias innodb se equilibrarán automáticamente entre los nodos de memoria sin establecer numactl --interleave = all, vaciando las memorias caché del búfer de Linux o forzando al sistema operativo a asignar el grupo de búferes de InnoDB?
Wen Ren
@Rolando, Niza 2x 100 GB de ram. Que cliente es
Pacerier
Pensé que las "instancias" se implementaron así: (número de bloque) MOD (instancias numéricas) -> (en qué instancia colocar el bloque). Eso no tiene nada que ver con NUMA.
Rick James
4

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)

Matt Healy
fuente
-1

¿Qué parámetros de configuración cambia más comúnmente de sus valores predeterminados?

configuración de memoria

sbczk
fuente
¿Puedes dar una respuesta más explicativa? ¿Qué hay de ellos cambias? ¿Por qué haces esos cambios? ¿Cuáles son sus observaciones esperadas después de dichos cambios? ¿Cómo sabes a qué cambiarlos?
jcolebrand
la configuración mysql lista para usar está preparada para configurar rápidamente las tablas myisam (ya que la mayoría de los usuarios la usan de esa manera), además de eso, para tener un servidor bien optimizado, debe elegir el motor "primario" para usar (innodb o mysql) como realmente bastante base de datos difícil de configurar para un rendimiento excelente para motores de cabina, mysql tiene memorias intermedias separadas para motores myisam e innodb
sbczk