Multi núcleos y rendimiento MySQL

38

La importancia de la RAM es un hecho establecido, pero hay mucho menos material disponible sobre la importancia de los núcleos y el subprocesamiento múltiple cuando se trata del uso de la CPU por parte de MySQL. Estoy hablando de la diferencia de ejecutar MySQL en 4cores vs 6cores vs 8cores y así sucesivamente.

¿Los diferentes motores de almacenamiento usan la CPU de manera diferente?

Rick James
fuente
está relacionado pero no aborda los comportamientos de diferentes motores de almacenamiento hacia CPU de múltiples núcleos.
Rick James
1
En efecto. Es por ello que no hay "más cerca que duplicado" voto ...
GBN
Esta es una comunidad maravillosa, todavía estoy aprendiendo cómo usar este sitio.
Rick James
Hola amigo, echa un vistazo aquí: mysql-cluster-blog.com encuentras al menos algo

Respuestas:

30

Cuando se trata de MySQL, no hay comparación entre los motores de almacenamiento, excepto que se divide en dos categorías básicas:

MySQL presenta el uso de varios motores de almacenamiento

En cuanto a los motores de almacenamiento enumerados, los únicos que cumplen con ACID son InnoDB y NDB. ¿Por qué es importante mencionar esto? Dos razones:

  • Otros motores de almacenamiento simplemente no se benefician con la presencia de más núcleos, que no sean E / S de disco básico, uso de CPU y rendimiento general.
  • El código para cada motor de almacenamiento no transaccional, que dicta básicamente 14 operaciones internas independientemente del motor de almacenamiento, no fue diseñado para aprovechar el acceso a múltiples núcleos.

InnoDB bajo MySQL 5.5, InnoDB Plugin) y XtraDB de Percona Server tienen opciones que puede configurar para acceder a múltiples núcleos (Percona Server lo ha estado haciendo por más tiempo). De hecho, Percona inyecta alrededor de 30,000 líneas de código específicamente para mejorar el rendimiento de InnoDB con cada nueva versión GA del código fuente MySQL. Podemos estar seguros de que Oracle ha incluido sus propias mejoras de su propio grupo de expertos para ejecutarse dentro de InnoDB para la operación multinúcleo (desde MySQL 5.1.38).

Con la necesidad de realizar MVCC en los datos junto con el bloqueo de fila / página, el rendimiento de la transacción ahora se puede instrumentar, medir y configurar.

Si hay una cosa que he aprendido sobre el uso de múltiples núcleos, es que debe ajustar InnoDB de manera efectiva y no solo confiar en InnoDB de inmediato .

ACTUALIZACIÓN 2011-09-20 08:03 EDT

Con respecto a que InnoDB se beneficie de todos los núcleos, debemos mantener las cosas en perspectiva. Los núcleos también deben atender otros asuntos (SO, Disco, Memoria, Aplicaciones, Monitoreo, etc.) en el Servidor de Base de Datos. Para aquellos con presupuestos modestos, muchos tienden a tener un servidor de base de datos que también proporciona NFS, monitoreo desde Munin, soporte de aplicaciones para JBoss, PHP, y la lista continúa. Si desea que MySQL, más específicamente InnoDB, use más núcleos, el servidor de base de datos debe estar dedicado exclusivamente a MySQL y el sistema operativo / disco / memoria debe atender únicamente a MySQL . Dada esta perspectiva, InnoDB involucrará más núcleos sin ninguna duda .

En cuanto a InnoDB Plugin, se mencionó simplemente para mostrar iniciativas anteriores para tener un mejor InnoDB por parte de MySQL (eh, Oracle. Lo siento, todavía no sale de la lengua). Las nuevas variables para convocar más actividad central se hicieron evidentes a partir de MySQL 5.1.38.

Por ejemplo, innodb_read_io_threads e innodb_write_io_threads (ambos desde MySQL 5.1.38) asignan el número especificado de hilos para lecturas y escrituras. El valor predeterminado es 4 y el máximo es 64. ¡La configuración predeterminada y máxima es tan diferente (4 - 64) que muestra que InnoDB es tan multiproceso e intensivo en núcleos como lo configura !

Percona dirigió las necesidades de la comunidad MySQL para acceder a más núcleos con InnoDB. En consecuencia, MySQL comenzó a seguir su ejemplo. Tengo que admitir que Oracle (yuck) hizo las mejoras necesarias para una mayor actividad principal.

RolandoMySQLDBA
fuente
¿InnoDB en MySQL 5.5 ajustado como sugirió anteriormente puede beneficiarse de todos los núcleos? {un poco confundido sobre el complemento InnoDB}
Rick James
@Rick - Abordó tu comentario en mi respuesta
RolandoMySQLDBA
Aquí parece ser una historia completamente diferente y MyISAM parece caer de bruces cuando se trata de utilizar núcleos múltiples, pero por otro lado en dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM tiene ventajas Por lo tanto, parece ser un empate decidir qué camino tomar.
Rick James
2
Todo depende del propósito que tenga al usar MyISAM o InnoDB. ¿Qué y cuánto estás dispuesto a almacenar en caché? ¿Confía en MySQL u otros mecanismos de almacenamiento en caché (como barniz y memcached) para la recuperación de datos? ¿Su hardware está correctamente ampliado para InnoDB? ¿Es el 98% de sus SQL SELECT? ¿La tabla está en el mejor formato para lecturas de alta velocidad? Responder estas preguntas de antemano debería guiarnos en cuanto a la selección del motor de almacenamiento, la configuración adecuada, la selección de hardware, incluso llegar a cosas más profundas como la alta disponibilidad, la topología de la base de datos, la división de lectura / escritura, y esta lista puede continuar.
RolandoMySQLDBA
9

Me parece que hablar de motores de almacenamiento que usan núcleos puede ser engañoso para los principiantes. Siempre que un programa sea suficientemente multiproceso, el sistema operativo lo programará en tantos núcleos como sea posible.

El problema específico que limita el escalado de la CPU es cuando el código de bloqueo interno ( mutexes ) tiene contención y bloquea la ejecución simultánea de hilos. Todos los motores de almacenamiento requerirán mutexes, pero ciertamente hay algunos hot en MyISAM.

Si ignoramos la contención de mutex por un segundo y volvemos a su pregunta principal: ¿qué tan importante es tener muchos núcleos? -

Me gusta tener muchos núcleos para las cargas de trabajo que atienden las solicitudes de los usuarios. Tener muchos puede reducir la variación entre los tiempos de consulta. Piense en esto como haciendo cola en el supermercado con 12 pasillos abiertos frente a solo 2.

Actualización : escribí una publicación de blog sobre por qué la escalabilidad vertical (núcleos múltiples) es importante.

Morgan Tocker
fuente
55
+1 por mencionar al elefante en la sala: contienda mutex
cerd