Tengo un servidor mysql 5.1 con una base de datos de aproximadamente 450 tablas, ocupando 4GB. La gran mayoría de estas tablas (todas menos 2) son MyIsam. Esto ha estado bien en su mayor parte (no necesita transacciones), pero la aplicación ha estado ganando tráfico y ciertas tablas se han visto afectadas debido al bloqueo de la tabla en las actualizaciones. Esa es la razón por la que 2 de las tablas son InnoDB ahora.
La conversión en las tablas más pequeñas (100k filas) no toma mucho tiempo, causando un tiempo de inactividad mínimo. Sin embargo, algunas de mis tablas de seguimiento se están acercando a 50 millones de filas. ¿Hay alguna forma de acelerar una ALTER TABLE...ENGINE InnoDB
mesa grande? Y si no, ¿hay otros métodos para convertir, minimizando el tiempo de inactividad en estas tablas de escritura pesada?
fuente
Respuestas:
Permítanme comenzar diciendo: Odio ALTER. Es malvado, en mi humilde opinión.
Digamos, este es tu esquema de tabla actual:
Aquí está el camino que recomiendo:
Cree un nuevo objeto de tabla que reemplazará al anterior:
Inserte todas las filas de la tabla anterior por nombre en la tabla nueva:
Prueba de humo tu migración:
Cambie los nombres de las tablas para que pueda mantener una copia de seguridad en caso de que necesite deshacer.
Proceda a la prueba de regresión.
Este enfoque se vuelve cada vez más preferible con tablas con múltiples índices y millones de filas.
Pensamientos?
fuente
ALTER TABLE
tomaría más tiempo queINSERT INTO...SELECT
en 50 millones de filas?1) La protección contra pérdidas es una función de la paranoia. Siempre haz una copia de seguridad. Si eres realmente paranoico, haz una copia de seguridad y luego restaura desde la copia de seguridad.
2) Esta página del manual de MySQL tiene instrucciones para convertir tipos de tablas.
3) PostgreSQL realiza búsquedas de texto completo , The Sphinx Engine parece hacerlo para MySQL
fuente
Es X veces más fácil optimizar todo el servidor (configuración de memoria, cachés, índices) cuando solo se utiliza un motor. Mezclar myisam con innodb en bases de datos grandes siempre se atascará en algún momento forzado por algún comprosise para que ambos motores funcionen bien (pero no excelente :)
Le recomiendo que se interese en algunos motores de búsqueda de texto completo dedicados como sphinx , lucene ( solr ) y lo elimine de la capa de base de datos.
fuente