¿Cómo se elige un motor de base de datos MySQL?

16

En particular, ¿cómo elige entre MyISAM e InnoDB, cuando a ninguno le falta una característica requerida (por ejemplo, no necesita claves externas).

¿Siempre se reduce a probar ambos y medir? ¿O hay buenas reglas generales con respecto al número y frecuencia de lecturas versus escrituras, y otras medidas como esa? ¿El tamaño de la tabla tiene algún efecto en la elección típica?

Tony Meyer
fuente

Respuestas:

6

La respuesta es que siempre debe medir, preferiblemente con sus propios datos y carga de trabajo si es posible.

Dado que los patrones de acceso a datos pueden variar mucho de una aplicación a otra, es difícil decirlo y, con toda probabilidad, es imposible determinar el "mejor" motor de almacenamiento para todas las cargas de trabajo.

Sin embargo, hay desarrollos muy alentadores en el espacio MySQL que asistieron a MySQLConf / Percona Performance Conf la semana pasada.

Algunos de los motores de almacenamiento alternativos:

  1. XtraDB (tenedor de InnoDB)
  2. Complemento InnoDB
  3. PBXT
  4. TokuDB

Además, Percona, Google, etc. han contribuido con parches que ayudan enormemente con el rendimiento de InnoDB. Personalmente, ejecuto una compilación OurDelta. Funciona muy bien para mí y animo a revisar las construcciones OurDelta y Percona.

Jauder Ho
fuente
Si está interesado en los puntos de referencia, pruebe sysbench o iibench.
Jauder Ho
¿Alguno de los motores de almacenamiento alternativo es lo suficientemente estable como para ser adecuado para un sitio de producción?
Tony Meyer
Don MacAskill está buscando poner XtraDB en producción. YMMV.
Jauder Ho
El rendimiento no es el único requisito: considere también los problemas operativos (de hecho, en mi experiencia, por lo general son más importantes)
MarkR
Obviamente, el rendimiento no es el único requisito, aunque creo que la solicitud original preguntaba más sobre el rendimiento. Otras consideraciones, como la operativa (como señala) y las características, desempeñarán un papel en el proceso de selección.
Jauder Ho
5

Si se trata solo de un sistema simple de almacenamiento / informe, uso MyISAM por su rendimiento bruto.

Usaría InnoDB si me preocuparan los múltiples accesos concurrentes con muchas escrituras, para aprovechar el bloqueo a nivel de fila.

Alnitak
fuente
1
Para cualquier carga de trabajo que mezcle lecturas y escrituras, InnoDB es la única opción (que actualmente se está enviando).
Dave Cheney el
4

Hay una buena cantidad de puntos de referencia para diferentes motores de bases de datos MySQL. Hay uno decente que compara MyISAM, InnoDB y Falcon en el Blog de rendimiento MySQL de Percona , consulte aquí .

Otra cosa a considerar entre los dos motores antes mencionados (MyISAM e InnoDB) son sus enfoques de bloqueo. MyISAM realiza el bloqueo de tablas, mientras que InnoDB realiza el bloqueo de filas. Hay una variedad de cosas a considerar, no solo cifras de rendimiento francas.

James B
fuente
4

Hay características que encontrará muy útiles, por razones operativas, incluso si su aplicación no las requiere absolutamente:

  • InnoDB tiene MVCC, lo que significa que puede realizar copias de seguridad consistentes sin bloqueo
  • InnoDB tiene recuperación automática, lo que significa que no hay operaciones de TABLA DE REPARACIÓN prolongadas después de un cierre impuro
  • Con InnoDB, los lectores nunca bloquean a los escritores y viceversa, lo que significa (generalmente hablando) mayor concurrencia (sin embargo, esto no necesariamente significa un mejor rendimiento en el caso general)
  • InnoDB agrupa sus filas en la clave primaria, lo que PUEDE significar menos operaciones de E / S para operaciones de lectura SI la clave primaria se eligió suficientemente bien.

Entonces, a pesar de las restricciones de clave externa, es probable que desee utilizar InnoDB de todos modos.

por supuesto, esto es ServerFault, no Stack Overflow, por lo que la respuesta correcta es:

  • Siempre debe usar el motor que los desarrolladores de aplicaciones hayan elegido
  • Si no han elegido un motor específico, no se toman muy en serio el uso de MySQL y probablemente no saben cómo usarlo correctamente.
  • No puede cambiar a un motor diferente al que se probó en su aplicación, puede introducir errores.
MarkR
fuente
2
¿Realmente cree que el motor de la base de datos es decisión del desarrollador, no de los administradores? Como desarrollador, quiero decir "Tengo estos datos, con los que haré esto", y dejar la optimización (y copia de seguridad, y ...) de la base de datos al administrador.
Tony Meyer
1
Sí, el desarrollador necesita poder desarrollar y probar su aplicación contra un motor específico; se comportan de manera muy diferente tanto funcionalmente como en rendimiento.
MarkR
2

Mi proveedor de alojamiento nos recomendó deshacernos de MyISAM por completo y cambiar a InnoDB, a menos que no sea posible.

En nuestro caso, teníamos una corrupción severa de datos que comenzó a mostrarse de unas pocas a varias veces al día, siempre requiriendo REPAIR TABLE y comandos relacionados, lo que llevó años en tablas grandes.

Una vez que convertimos (o: fuimos convertidos) a InnoDB, los problemas desaparecieron instantáneamente. Desventajas / advertencias que tuvimos:

  • No se pueden convertir tablas con el índice FULLTEXT (este problema desapareció con el tiempo por sí solo; se reemplazó con una solución basada en Solr / Lucene que tiene una calidad mucho mejor de todos modos)
  • Las tablas grandes con millones de filas que a menudo requieren COUNT (*) eran muy lentas, tampoco pudimos cambiarlas.

Pero tenga en cuenta: todo esto es específico de nuestro entorno, etc., por lo que generalmente no se aplica.

marca
fuente
Solo seleccionar count ( ) de la tabla es más rápido en MyISAM. Seleccione count ( ) de la tabla donde column = value tiene un rendimiento similar tanto en MyISAM como en InnoDB. mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables
sumar