Tengo un problema con la tabla de bloqueo en InnoDB en la operación de eliminación.
Tengo una tabla de la cola con, por ejemplo, una columna y una gran cantidad de transacciones que se pueden insertar filas en esta cola o eliminarlos.
No hay dos transacciones trabajando con las mismas filas al mismo tiempo. Así, todos los bloqueos de fila debe ser distinto.
Pero a veces, cuando la operación de eliminación se elimina la mayor parte de las filas de la tabla InnoDB prefiere el uso de bloqueo de tabla en lugar de bloqueo de fila y que hace que los interbloqueos.

No puedo reproducir este interbloqueo exactamente, pero he encontrado que el problema del bloqueo.
es decir, tengo la tabla de la cola:identificación con los valores(1,3,4,5,6,7)

Transacción 1:

insert into queue value(2);

Transacción 2:

delete from queue where id in (1,3,4,5,6,7); -- here the lock comes
Eso es causado por MySQL «brecha de bloqueo» si no me equivoco: dev.mysql.com/doc/refman/5.6/en/innodb-record-level-locks.html
Se me olvidó una cosa. He hecho un experimento. Yo había añadido 200 basura de filas en esta tabla y la tabla de cerraduras y cerrojos ido.
Usted fue a la derecha. No era el bloqueo de la tabla, fuera de la brecha de cerraduras.
dado el enlace está roto, u puede actualizar?

OriginalEl autor Vadim Babaev | 2014-04-21

1 Comentario

  1. 6

    Primero de todos, asumiendo id es una clave principal o, al menos, la columna indizada.

    De inserción no debe de bloqueo de la mesa, así que es probable que cualquier otro update/delete consulta se ejecuta en el mismo momento de la eliminación de los registros.

    Si no es el caso, entonces puede ser debido a la «brecha de bloqueo», como se menciona @a_horse_with_no_name.

    Así que cuando usted reciba este tema de nuevo, entonces usted necesita para almacenar todos los procesos «show completo processlist» a su fin, y también de verificación «mostrar motor innodb status» donde podrás ver processids relacionados con interbloqueo, esto le ayudará a conseguir exacta del problema.

    Más lejos, Se puede evitar este bloqueo para eliminar todas las filas de uno por uno basado en la clave principal.

    Mira como me tienes. Mi problema estaba en el orden de las filas que yo estaba tratando de eliminar. Yo ordenados en orden ascendente y interbloqueos se habían ido. Por lo tanto, fue la brecha de los bloqueos que se cierre toda la tabla.
    ¿cuál sería un ejemplo de su problema inicial parece que no han brecha de bloqueo de aquí?

    OriginalEl autor Zafar Malik

Dejar respuesta

Please enter your comment!
Please enter your name here