DBAtlas · Atlas de operaciones de bases de datos

1206: The total number of locks exceeds the lock table size (el número total de bloqueos supera el tamaño de la tabla de bloqueos)

MySQL

¿Qué significa?

InnoDB agotó la memoria asignada a los bloqueos que mantiene (las estructuras de bloqueo dentro del buffer pool). Ocurre cuando una sola transacción acumula demasiados bloqueos de fila/gap, y la transacción se revierte.

¿Por qué ocurre?

Transacciones únicas muy grandes: UPDATE/DELETE de millones de filas a la vez, una cláusula WHERE sin índice que bloquea toda la tabla, o un innodb_buffer_pool_size demasiado pequeño para la carga. Los grandes trabajos por lotes son el desencadenante clásico.

Cómo solucionarlo

Divida el DML grande en lotes pequeños (p. ej., elimine/actualice 10,000 filas cada vez con LIMIT en un bucle y COMMIT tras cada lote). Indexe las columnas del WHERE para reducir el número de filas bloqueadas. Como solución permanente, aumente innodb_buffer_pool_size (las estructuras de bloqueo se asignan desde ahí). Evite transacciones innecesariamente largas.

Abrir en DBAtlas →

Más entradas de este motor