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?
mysql
performance
Rick James
fuente
fuente
Respuestas:
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:
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.
fuente
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.
fuente