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)
MySQLQue 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.
Autres entrées pour ce moteur
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (aucune partition de la table pour cette valeur)
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value (le champ 'name' n'a pas de valeur par défaut)
- 1236Got fatal error 1236 from master when reading data from binary log (erreur fatale 1236 reçue du master lors de la lecture du binary log)
- 1129Host 'host' is blocked because of many connection errors (l'hôte 'host' est bloqué en raison de nombreuses erreurs de connexion)
- 1194Table 'name' is marked as crashed and should be repaired (la table 'name' est marquée comme endommagée et doit être réparée)
- 1615Prepared statement needs to be re-prepared (l'instruction préparée doit être préparée à nouveau)