¿Qué tablas deberían o podrían migrarse a InnoDB y cuáles deberían seguir siendo MyISAM?

10

Según el título: ¿Hay una lista rápida de candidatos para las tablas para migrar a InnoDB? Y lo que debería seguir siendo MyISAM.

Alguna información adicional

  • El sitio tiene una carga de lectura bastante pesada, pero inserta aproximadamente 10 nodos por hora, con etiquetas y demás.
  • Hacemos un uso intensivo de CCK (una gran cantidad de tablas normalizadas en forma de content_field%).
  • También usamos Vistas para aproximadamente todos nuestros bloques y páginas; pero muchos de ellos son candidatos para el reemplazo con módulos personalizados (como para reducir las consultas a la base de datos y el peso de esas consultas).
  • Todos los usuarios son anónimos; con la excepción de algunos editores y webmasters conectados.
Berkes
fuente
Es gracioso que todo Internet no tenga idea de cómo responder realmente a esta pregunta. Qué tablas de Drupal toman más escrituras y se bloquean ... quién sabe.
JM Becker

Respuestas:

8

Debe convertir todos los datos a InnoDB para evitar problemas de bloqueo de la tabla. Sin embargo, aquí hay algunas cosas para pensar:

Indexación FULLTEXT

En la actualidad, solo MyISAM admite la indexación FULLTEXT. La indexación de FULLTEXT para InnoDB está actualmente en proceso para MySQL 5.6 pero no está lista para producción . Si tiene tablas de Drupal que tienen índices FULLTEXT, no se pueden convertir a InnoDB en este momento.

ACTUALIZACIÓN sobre indexación FULLTEXT

MySQL 5.6 ahora es GA (fuera de uso de producción). Pruebe la indexación FULLTEXT en InnoDB.

Para localizar esas tablas que tienen un FULLTEXTíndice, ejecute esta consulta:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Si no vuelven filas, convierta todas las tablas de InnoDB al contenido de su corazón. Escribí una publicación anterior sobre cómo convertir todas las tablas MyISAM a InnoDB usando solo mysql .

Replicación MySQL

Si tiene un entorno de lectura pesada, las lecturas pueden ir más rápido en MyISAM si hace lo siguiente:

  • Configurar la replicación maestra / esclava
  • Crea uno o más esclavos de lectura bajo el maestro
  • Agregue --skip-innodb/etc/my.cnf en todos los esclavos (convierte las tablas a MyISAM al cargar datos en el esclavo)
  • Cambie el formato de fila de todas las tablas MyISAM en cada Esclavo a FIJO mediante este comando: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Publiqué algo sobre esto en el DBA StackExchange
  • El libro MySQL Database Design and Tuning recomienda usarlo ROW_FORMAT=FIXEDen las páginas 72,73. Esto convertirá internamente todos los campos VARCHAR a CHAR. Aumentará la tabla MyISAM, pero los SELECT ejecutados en ella serán mucho más rápidos. Personalmente puedo dar fe de esto. Una vez tuve una mesa de 1.9GB. Cambié el formato con ALTER TABLE tblname ROW_FORMAT=FIXED. La mesa terminó 3.7GB. La velocidad de los SELECT contra ella fue 20-25% más rápida sin mejorar ni cambiar nada más.

El único dolor de cabeza con esto es hacer que su aplicación sea consciente de los esclavos de lectura separados.

EPÍLOGO

Si está buscando otros beneficios que tiene cada motor de almacenamiento, consulte el DBA StackExchange:

RolandoMySQLDBA
fuente
4

Como su sitio web está en el lado de lectura pesada, simplemente convertiría todas las tablas a InnoDB. Entonces podrá optimizar el rendimiento de lectura al dimensionar el grupo de búferes InnoDB y el caché de consultas de manera adecuada. De esta manera, estamos logrando varios miles de consultas por segundo en los servidores de bases de datos dedicados en nuestra infraestructura de alojamiento Drupal.

geewiz
fuente