UPDATE requête dans MySQL sur une grande table
-
28-10-2019 - |
Question
J'ai une base de données MySQL avec 21M d'enregistrements et j'essaye de faire une mise à jour sur environ 1M d'enregistrements mais la requête échoue avec ERROR 1206 (HY000): The total number of locks exceeds the lock table size.
Est-il possible de mettre à jour la table sans acquérir de verrous?
Je n'ai pas accès pour modifier les paramètres de configuration MySQL tels que innodb_buffer_pool_size
.Y a-t-il une manière différente d'atteindre la même chose?
Merci
MODIFIER :
- Je l'ai essayé par lots de 5000, cela fonctionne plusieurs fois, mais j'obtiens la même erreur
- J'ai essayé LOCK TABLES pour verrouiller la table entière et cela ne fonctionne toujours pas.
La solution
Je pense que vous pouvez utiliser la clause limit pour effectuer les mises à jour par lots.
Autres conseils
Essayez de verrouiller au niveau de la table plutôt qu'au niveau de la ligne.Utilisez LOCK TABLES MyTable WRITE
.Cela pourrait résoudre le problème.Aucune garantie cependant!N'oubliez pas non plus de déverrouiller les tables!