No se puede descartar la tabla ya que se muestra esperando el bloqueo de metadatos

11

Estamos tratando de descartar una tabla, pero se está colgando, y cuando vemos el comando 'SHOW PROCESSLIST' se muestra como 'esperando el bloqueo de metadatos'. Incluso no podemos realizar ninguna operación en esa tabla en particular. ¿Alguien sabe cómo resolverlo?

ramya
fuente

Respuestas:

8

Si se accede a una tabla InnoDB a través de SELECT o DML (INSERT, UPDATE, DELETE), debería esperar un bloqueo de metadatos.

De acuerdo con la documentación de MySQL sobre el bloqueo de metadatos :

Para garantizar la serialización de la transacción, el servidor no debe permitir que una sesión realice una instrucción de lenguaje de definición de datos (DDL) en una tabla que se utiliza en una transacción incompleta en otra sesión. El servidor logra esto mediante la adquisición de bloqueos de metadatos en las tablas utilizadas dentro de una transacción y aplazando la liberación de esos bloqueos hasta que finalice la transacción. Un bloqueo de metadatos en una tabla evita cambios en la estructura de la tabla. Este enfoque de bloqueo implica que una tabla que está siendo utilizada por una transacción dentro de una sesión no puede ser utilizada en sentencias DDL por otras sesiones hasta que finalice la transacción.

Dicho esto, debe determinar si otra sesión de DB tiene bloqueos en la mesa. Si dicha sesión es una transacción incompleta, es posible que haya una demora.

Si simplemente necesita recuperar rápidamente el espacio en disco, puede ejecutarlo TRUNCATE TABLE.

SUGERENCIA

Intente renombrar la tabla antes de intentar soltarla de la siguiente manera:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
RolandoMySQLDBA
fuente
La sugerencia no funcionó para nosotros. En su lugar, obtenemos "Esperando bloqueo de metadatos de tabla" en ALTER TABLE foorenamefootodrop
Motin
@Motin todo lo que significa es que una o más conexiones DB todavía estaban accediendo a la tabla foo. Una vez que se hicieron todas esas conexiones, entonces ALTER TABLEpuede continuar.
RolandoMySQLDBA