J'ai principalement utilisé MyISAM
comme moteur de stockage dans le passé et j'utilise depuis peu InnoDB
plus; et maintenant je suis à un point où je commence vraiment à travailler avec locking
d'InnoDB et isolation levels
.Comprendre comment gérer les blocages et leurs annulations dans InnoDB
Je lis la documentation et une chose qui me préoccupe est que it states:
InnoDB détecte automatiquement les blocages de transactions et annule une ou plusieurs transactions pour sortir de l'impasse.
En d'autres termes un code qui était censé à courir mais j'ai annulées en raison d'une impasse et tout d'un coup l'intégrité de votre données est parce que ledit code n'a pas couru !?
They also state que:
Normalement, vous devez écrire vos applications afin qu'ils soient toujours prêts à réémettre une transaction si elle est annulée à cause d'une impasse.
Le problème est qu'il n'explique pas comment de réémettre les requêtes ou test s'ils ont échoué à cause d'une impasse? Cela me semble être un problème important qu'une partie de votre code que vous prévoyez d'exécuter (les requêtes soient exécutées) peut être annulée et ne pas être réémise) sans que vous ayez ajouté du code pour éviter cela. Cela ne devrait-il pas être automatique?
Donc, quelqu'un peut-il m'expliquer ici quelle est la meilleure façon de gérer cela ou si je ne comprends pas quelque chose.
Donc, si je voulais les réémettre, j'exécuterais simplement les requêtes dans une boucle pendant x fois ou jusqu'à ce qu'il réussisse? – Brett
Oui. Je recommande 2-3 fois, puis donne une erreur fatale. Si cela ne réussit pas au second essai, il y a probablement autre chose qu'un simple blocage qui cause des problèmes, et vous devez l'étudier. –