DBAtlas · Atlas de operações de banco de dados

1206: The total number of locks exceeds the lock table size (o número total de locks excede o tamanho da tabela de locks)

MySQL

O que significa?

O InnoDB esgotou a memória alocada para os locks que mantém (as estruturas de lock dentro do buffer pool). Ocorre quando uma única transação acumula locks de linha/gap demais, e a transação sofre rollback.

Por que acontece?

Transações únicas muito grandes: UPDATE/DELETE de milhões de linhas de uma vez, uma cláusula WHERE sem índice que bloqueia a tabela inteira ou um innodb_buffer_pool_size pequeno demais para a carga. Grandes jobs em lote são o gatilho clássico.

Como resolver

Divida DMLs grandes em lotes pequenos (por exemplo, exclua/atualize 10.000 linhas por vez com LIMIT em um loop e faça COMMIT após cada lote). Indexe as colunas do WHERE para reduzir o número de linhas bloqueadas. Como solução permanente, aumente innodb_buffer_pool_size (as estruturas de lock são alocadas a partir dele). Evite transações desnecessariamente longas.

Abrir no DBAtlas →

Mais entradas deste banco