DBAtlas · Atlas d'exploitation des bases de données

1206: The total number of locks exceeds the lock table size (le nombre total de verrous dépasse la taille de la table des verrous)

MySQL

Que signifie cette erreur ?

InnoDB a épuisé la mémoire allouée aux verrous qu'il détient (les structures de verrous dans le buffer pool). Cela se produit lorsqu'une seule transaction accumule trop de verrous de ligne/gap, et la transaction est annulée.

Cause

Très grosses transactions uniques : UPDATE/DELETE de millions de lignes d'un coup, clause WHERE sans index qui verrouille toute la table, ou innodb_buffer_pool_size trop petit pour la charge. Les gros traitements par lots sont le déclencheur classique.

Comment la corriger

Découpez les gros DML en petits lots (par ex. supprimez/mettez à jour 10,000 lignes à la fois avec LIMIT dans une boucle et un COMMIT après chaque lot). Indexez les colonnes du WHERE pour réduire le nombre de lignes verrouillées. Comme correctif durable, augmentez innodb_buffer_pool_size (les structures de verrous y sont allouées). Évitez les transactions inutilement longues.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur