THE ORB
Démarrage du studio

Interblocage détecté / délai d'attente de verrou dépassé

Deux choses ont tenté d'enregistrer le même enregistrement au même moment et la base en a annulé une.

groupsUn enregistrement raté de temps en tempscodeIl faut un développeur

Faites d'abord ceci

De temps en temps, c'est normal. Si cela arrive constamment, un script enregistre beaucoup trop souvent.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Deux transactions détiennent chacune une ligne que l'autre veut. MySQL en tue une pour que l'autre puisse finir : celle qui a été tuée est l'erreur que vous lisez. Un délai d'attente de verrou est le cousin plus doux : personne n'a interbloqué, une requête a simplement trop attendu un verrou et a abandonné.

Ni l'un ni l'autre n'est une corruption. La base a bien fait son travail ; c'est au code de gérer.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Deux sauvegardes pour le même joueur en même temps

    Une sauvegarde automatique et une manuelle en concurrence sur la même ligne.

  2. 2

    Des lignes verrouillées dans des ordres différents

    Un chemin de code met à jour l'utilisateur puis le véhicule, un autre le véhicule puis l'utilisateur. C'est l'interblocage d'école.

  3. 3

    Une longue transaction qui retient des verrous

    Une transaction ouverte, quelque chose de lent fait dedans, puis validée.

  4. 4

    Un UPDATE massif à l'heure de pointe

    Une paie ou un wipe touchant chaque ligne pendant que les joueurs sont aussi sauvegardés.

  5. 5

    Des index manquants qui élargissent le verrou

    Sans index, un UPDATE verrouille bien plus de lignes que nécessaire.

Comment savoir laquelle est la vôtre

SHOW ENGINE INNODB STATUS;

La section LATEST DETECTED DEADLOCK nomme les deux transactions et les deux instructions, ce qui constitue en général tout le diagnostic.

Où regarder

Les deux instructions nommées par InnoDB, et si elles touchent les mêmes tables dans des ordres différents.

Comment la corriger

Verrouillez dans un ordre cohérent partout, gardez les transactions courtes, indexez ce que vous filtrez, et réessayez une fois en cas d'interblocage plutôt que d'abandonner l'opération :

CREATE INDEX idx_users_identifier ON users (identifier);

Un interblocage est une erreur réessayable par construction : la deuxième tentative réussit normalement parce que la transaction concurrente est terminée entre-temps.

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer repère les motifs de requête à l'origine de ceci.

Les erreurs qui voyagent avec celle-ci