type tablas por establece engine defecto create activar mysql database schema innodb

mysql - tablas - myisam



mysql "drop database" lleva tiempo, ¿por qué? (3)

mysql5.0 con un par de bases de datos "A" y "B", ambas con grandes tablas innodb. "soltar la base de datos A"; congela la base de datos "B" por un par de minutos. Nada está usando "A" en ese punto, entonces ¿por qué es una operación tan intensiva?

Puntos de bonificación: dado que usamos "A", cargamos datos en "B", y luego cambiamos a usar "B", ¿cómo podemos hacer esto más rápido? Dejar caer bases de datos no es el tipo de cosas que uno típicamente tiene que hacer todo el tiempo, por lo que esto es un poco fuera de serie.


Por defecto, todas las bases de datos innodb en una instalación de servidor mysql determinada usan el mismo grupo físico de archivos de datos, por lo que "la base de datos A puede caer" podría afectar a la base de datos B. Dado que "soltar la base de datos" probablemente implique una gran reorganización de los archivos de datos innodb, es concebible que sea una operación de bloqueo, ya sea por la intensidad de la operación o por diseño.

Sin embargo, creo que puede hacer que cada base de datos use diferentes archivos físicos, aunque yo mismo no lo haya intentado, así que tendrá que descubrir los detalles por sí mismo. De lo contrario, es posible que deba utilizar dos instalaciones diferentes de mysql una al lado de la otra en la misma máquina, lo cual es perfectamente factible.


Siguiendo a skaffman:

Cambie su my.cnf (y reinicie MySQL) para incluir:

innodb_file_per_table = 1

( http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html )

Esto le dará a sus bases de datos almacenamiento de archivos dedicado y lo sacará del grupo compartido. Luego, le permitirá hacer cosas divertidas como colocar las tablas / índices en diferentes discos físicos para dividir aún más las E / S y mejorar el rendimiento.

Tenga en cuenta que esto no cambia las tablas existentes; tendrás que trabajar para obtenerlos en su propio archivo ( http://capttofu.livejournal.com/11791.html ).


Así que no estoy seguro de que la respuesta de Matt Rogish vaya a ayudar al 100%.

El problema es que MySQL * tiene un mutex (bloqueo mutuamente exclusivo) alrededor de las tablas de apertura y cierre, por lo que básicamente significa que si una tabla está en proceso de ser cerrada / eliminada, no se pueden abrir otras tablas.

Esto lo describe un colega mío aquí: http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/

Una excelente estrategia de reducción de impacto es usar un sistema de archivos como XFS.

La solución es fea. En esencia, tiene que mordisquear todos los datos en las tablas antes de soltarlos (vea el comentario # 11 en el enlace de arriba).