¿Es una práctica común mezclar tablas InnoDB y MyISAM en el mismo servidor?


21

Tengo una sola base de datos de aproximadamente 4.5 GB ejecutándose en un servidor con 8 GB de RAM. La gran mayoría de las tablas son MyIsam (aproximadamente 4,3 GB), pero pronto voy a convertir algunas de ellas a InnoDB. (Va a ser un proceso lento, centrándose en las tablas más intensivas en escritura al principio).

¿Hay algo malo en ejecutar un servidor dedicado donde existan ambos tipos de motores de almacenamiento?


Is there anything wrong with running a dedicated server where both types of storage engines exist? Tal vez reformular a Multiple types?
John

La única razón por la que dije 'ambos' es porque esta pregunta es sobre los dos motores principales que están configurados para ser 'finamente ajustados'. Estoy tratando de ignorar otros tipos de motores como MEMORY o MERGE, que son tan poco comunes que afaik no son objeto de ajuste de rendimiento.
Derek Downey el

Respuestas:


18

No hay nada de malo en usar múltiples motores de almacenamiento en la misma máquina física, siempre y cuando comprenda las ventajas y desventajas de cada uno. Existen consideraciones de rendimiento, limitaciones de características y casos de uso para todos los tipos de almacenamiento de complementos.

Por ejemplo, si tiene una tabla pequeña con 90% de escrituras, puede elegir MyISAM. Si los datos se pueden regenerar fácilmente y es una tabla pequeña, digamos para hacer cola, puede elegir Memoria. Si tiene una tabla con un 90% de lecturas, y los datos tienen que estar allí cuando la busca, entonces probablemente elija un motor de almacenamiento que admita transacciones y atomicidad configurable, como InnoDB. Si desea accesibilidad a través del sistema de archivos sin datos dañinos, puede elegir CSV.

No obstante, puede utilizar de forma segura múltiples motores de almacenamiento dentro del mismo esquema, así como el host físico.

Sin embargo, permítanme señalar que sus amortiguadores juegan un papel en todo este desastre. Si usa MyISAM e InnoDB, deberá tener cuidado de que key_buffer e innodb_buffer_pool no compitan. Esto requerirá una planificación cuidadosa de su parte, pero eso es lo que hacemos.


44
+1 Otro caso de uso común es MyISAM para tablas que requieren búsqueda de texto completo e InnoDB para todas las demás tablas.
Asaph

@Aseph: Incluso en el momento de su comentario, InnoDB admite índices de texto completo .
BlueRaja - Danny Pflughoeft

2
^^^^ "Características de MySQL 5.6" no fue GA hasta
2013-02-05

1
@randymelder Buena respuesta. ¿Sería capaz de dar más detalles sobre lo que quiere decir con "Deberá tener cuidado de que su key_buffer e innodb_buffer_pool no contengan"?
Neel

1
Quiero que se demuestre que estoy equivocado, pero la lógica parece opuesta a esta stackoverflow.com/a/6796566/5645769 aquí.
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

No puedo decirte si esta es una práctica común. Puedo decir sobre mi propia experiencia.

Siempre uso la mejor herramienta para el trabajo, así que mezclo motores todo el tiempo. La mayoría de mis proyectos usan MyISAM como motor predeterminado.

Cuando necesito funciones especiales disponibles en InnoDB, lo hago.

Cuando una tabla es principalmente de solo lectura, elijo el motor de archivo antes de poder parpadear.

Sabiendo que el servidor de la máquina tiene suficiente memoria, todos mis datos temporales se almacenan en tablas de montón.

Vi en el pasado algunas ralentizaciones que mezclaban MyISAM e InnoDB, pero este no es un problema específico de MySQL. Es un problema de diseño que no parece cuando usas solo un motor. En realidad, usar el motor incorrecto provoca más desaceleración, no importa si es solo MyISAM, solo InnoDB o una combinación de ambos. Es difícil definir una fórmula para saber cuándo ocurrirá la desaceleración. Solo las pruebas reales podrían decírtelo.

Por supuesto, no podría preservar la integridad y la coherencia mezclando InnoDB y MyISAM en una consulta única.


El motor de archivo no admite la indexación, entonces, ¿por qué lo almacena en el archivo?
user4951

0

Intento evitar mezclar tablas MyISAM e InnoDB en la misma base de datos, pero esto es por razones de cordura y no prácticas. Sin embargo, me resulta útil tener una base de datos con tablas MyISAM para la búsqueda de texto completo para poder ejecutarla en los sitios. Mantenerlo en una base de datos separada con una clave foránea para cada entrada facilita que cualquier otro desarrollador que trabaje en la base de datos vea lo que está sucediendo.


¿Cómo puede tener una clave foránea cuando usa MyISAM?
a_horse_with_no_name

Terminología incorrecta, pero funciona como una clave foránea. Guardo el número de identificación del elemento de la tabla InnoDB y lo uso para hacer la búsqueda de la página en el resultado de la búsqueda.
Kenzo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.