Tengo un sitio de Drupal y estoy sufriendo problemas de rendimiento. Encontré ¿Cómo convierto una base de datos de MyISAM a InnoDB? indicando que el rendimiento puede mejorar cambiando.
¿Cómo puedo saber si mi base de datos MySQL es InnoDB o MyISAM?
performance
database
chrisjlee
fuente
fuente
Respuestas:
Puede ejecutar una consulta personalizada:
para enumerar todas las tablas en su base de datos y el motor que está en uso para cada una.
Alternativamente, puede iniciar sesión en su base de datos usando phpMyAdmin y seleccionar su base de datos ... verá el motor en la
Type
columna en la lista de tablas.Personalmente, recomendaría Navicat para MySQL , es una GUI MySQL muy agradable y hace que descubrir cosas como esta sea muy fácil.
Fuente: http://www.electrictoolbox.com/mysql-table-storage-engine/
fuente
SHOW TABLE STATUS
. Para obtener un recuento simple de cuántas tablas hay en cada tipo de motor, esSELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Mi mejor experiencia fue decidir por mesa. InnoDB es bueno, porque puede evitar el bloqueo de la tabla (ningún otro proceso puede leer de una tabla mientras un proceso escribe), pero funciona terriblemente con COUNT (), que se usa a menudo para consultas de buscapersonas.
(Editar: consulte el comentario de Clives a continuación)
También hay implicaciones en su configuración de MySQL, dependiendo de la base de datos que esté utilizando. Si tiene acceso al servidor, mysqltuner debería ser su primer paso, para verificar la configuración:
https://github.com/rackerhacker/MySQLTuner-perl#readme
fuente
COUNT
consultas, de acuerdo con este artículo del ex gerente de High Performance Group para MySQL, aunque solo afecta realmente una consulta que contieneCOUNT(*)
sin unaWHERE
cláusula.SELECT COUNT(*) FROM table
puede regresar instantáneamente con ese valor. InnoDB no lo hace, por lo que debe escanear todo el índice de la clave primaria. Dicho esto, aunque Drupal hace muchoSELECT COUNT(*)
, solo puedo pensar en un lugar en el código completo que lo haga sin unaWHERE
cláusula. Por lo tanto, no use MyISAM por preocupación para este caso particular. InnoDB con un grupo de búferes de tamaño decente será más rápido para todas las consultas del mundo real.Simplemente intentar cosas para obtener un sitio web más rápido es como cambiar de automóvil a ciegas y esperar que la próxima vez sea más rápido.
Primero pruebe las frutas bajas, si no ayuda, trate de encontrar el verdadero cuello de botella.
A menudo es solo una consulta de base de datos lenta que necesita un índice, o un módulo que haga las cosas de manera lenta.
También descubrí grandes diferencias entre los hosters. Si instala un nuevo drupal de fábrica, ¿está bien el rendimiento? Si no, es hora de buscar otro hoster.
fuente
FWIW nuestro sitio Drupal 6.x de casi 20K nodos estaba experimentando algunos problemas de rendimiento y decidí mover todas las tablas a InnoDB. Fue fácil y la forma en que lo manejé fue usar mysqldump para volcar todo el contenido en un archivo sql, usar un editor (sed) para reemplazar todas las apariciones de MyISAM en InnoDB y luego volver a cargar la base de datos desde ese archivo. Una de las desventajas es que no puede recuperar espacio de una base de datos InnoDB (IIRC), pero siempre que mantenga sus tablas duplicadas en una base de datos separada, no debería tener problemas. Ah, y vimos un aumento significativo en el rendimiento. Y debido a que tenemos cuatro instancias de Drupal, la gran cantidad de archivos de tabla se eliminó del sistema de archivos (sí, están contenidos dentro del propio archivo InnoDB). Este es mi valor de $ .02.
fuente
innodb_file_per_table
opción.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Agregue las opciones apropiadas (-uroot -psomepass
por ejemplo) a los dosmysql
s si es necesario.Solo un aviso. Si está en Drupal 6, puede instalar el módulo DBTuner ; puede mover fácilmente sus tablas de MyISAM a InnoDB. Entonces sí, ¡hay un módulo para eso!
fuente