2009-11-13 9 views
5

Esta pregunta es como una continuación de mi pregunta anterior: Am I right that InnoDb is better for frequent concurrent updates and inserts than MyISAM?¿Cuándo es el momento para que una tabla cambie de MyISAM a InnoDb?

Pero esta vez tengo preguntas concretas.
Sabemos que MyISAM es más rápido que InnoDb cuando no tenemos muchas actualizaciones concurrentes (insertos). Cuando tenemos muchas actualizaciones simultáneas, la tabla MyISAM se bloquea y todos los demás clientes deben esperar.

1) ¿Pero cuando es hora de cambiar de MyISAM a InnoDb? 1 actualización cada segundo? 10 actualizaciones cada segundo? 100 actualizaciones cada segundo?
2) Para un ejemplo concreto, ¿será mejor cambiar a InnoDb una de las tablas en mi sitio web donde normalmente tengo algunas actualizaciones por minuto (de diferentes sesiones), pero a veces puede ser ~ 2-3 actualizaciones por ¿segundo?

Respuesta

3

Creo que sus preguntas fueron contestadas en la pregunta anterior a la que hizo referencia.

1) Cuando crea la tabla. InnoDB ofrece más ventajas que el bloqueo a nivel de fila. Mejor velocidad cuando tienes múltiples clientes sql haciendo actualizaciones, menos riesgo de pérdida/corrupción de datos, integridad referencial, etc. Con solo unas pocas transacciones por segundo (TPS) no es probable que digas la diferencia en el rendimiento, pero InnoDB es más confiable y escala mejor.

2) Con solo 2-3 TPS, no verá ninguna diferencia significativa entre InnoDB y MyISAM. Incluso en hardware semi-antiguo.

FYI, una unidad de disco moderna debería poder manejar al menos ~ 200 transacciones de actualización por segundo.

Le recomiendo que lea en InnoDB, MVCC y ACID.

+0

Entiendo las ventajas de InnoDb, pero creo que en un alojamiento web compartido: el rendimiento y la "ligereza" es la prioridad numérica. De lo contrario, definitivamente siempre usaría InnoDb. – nightcoder

+0

@nightcoder: Entonces siempre debe usar InnoDB. En general, será "más ligero" que MyISAM. – tommym

1

Probablemente no deba cambiar una tabla por vez si puede.

Cambie todo el servidor. De esta forma, puede sintonizar su servidor para una carga de trabajo de innodb únicamente en lugar de una carga de trabajo de myisam. Los dos son mutuamente incompatibles (los búferes de memoria se asignan a motores específicos, no pueden compartir memoria).

Digamos que tiene 16G de ram, probablemente quiera utilizar aproximadamente 12G para un grupo de búferes innodb, siempre que no tenga tablas MyISAM.

Del mismo modo, si solo tiene tablas MyISAM, probablemente desee desactivar innodb por completo y dar un poco menos de la mitad (digamos 6G) a la memoria caché de myisam.

Un servidor myisam-innodb mixto necesita sacrificar el ajuste de memoria.

También lo único que realmente desea hacer es realizar su prueba de rendimiento una vez, no cada vez que cambie una tabla.

Es una simplificación masiva en algunos casos, y claramente errónea en otros decir "Sabemos que MyISAM es más rápido que InnoDb".

Si ha sintonizado InnoDB correctamente para su servidor y está ejecutando hardware adecuado para servidores, InnoDB debería poder competir con MyISAM en la mayoría de las consultas (sin incluir exploraciones de tablas completas, pero no está haciendo muchas de ellas, derecho).

Eso es, a menos que sus datos sean del tamaño de "broma trivial".

Si encuentra que innodb es mucho más lento para inserciones/actualizaciones, tenga en cuenta que ofrece un nivel mucho mejor de durabilidad; si lo sintoniza aproximadamente con la misma durabilidad que MyISAM, entonces verá un buen rendimiento con suerte .

+0

Bueno, en nuestro servidor principal usamos InnoDb solamente. Pero estoy preguntando sobre nuestro sitio web en un alojamiento compartido, por lo que creo que sus ideas no se aplican realmente, porque según entiendo el servidor MySQL en un servidor compartido tiene una configuración común para todas las bases de datos de todos los usuarios de hosting. – nightcoder

+0

Si está en un alojamiento compartido, no puede esperar un rendimiento. Espero que su base de datos sea pequeña, de lo contrario tendrá un desastre de rendimiento. El alojamiento compartido no permite alojar sitios ocupados o grandes bases de datos. En dichos sitios, el rendimiento generalmente no importa mucho. – MarkR

+0

Bueno, tenemos una base de datos de 500Mb y cientos de visitantes todos los días. Las consultas pueden ser lo suficientemente complejas. Pero el sitio funciona bien, tal vez tenemos suerte con nuestro hoster. – nightcoder

Cuestiones relacionadas