Maison > base de données > tutoriel mysql > Comment résoudre les erreurs de blocage MySQL causées par des verrous de transaction conflictuels ?

Comment résoudre les erreurs de blocage MySQL causées par des verrous de transaction conflictuels ?

Linda Hamilton
Libérer: 2024-12-18 09:37:14
original
650 Les gens l'ont consulté

How to Resolve MySQL Deadlock Errors Caused by Conflicting Transaction Locks?

Résolution de l'erreur « Deadlock » MySQL

L'erreur « Deadlock trouvé lors de la tentative d'obtention du verrouillage » de MySQL se produit lorsque des transactions simultanées tentent de verrouiller des ressources dans séquences opposées. Pour résoudre ce problème, assurez-vous que toutes les requêtes verrouillant plusieurs clés le font dans un ordre croissant.

Dans votre cas, le problème peut provenir des requêtes INSERT et UPDATE qui verrouillent plusieurs clés. Pensez à trier la clause WHERE par ordre croissant pour les deux requêtes :

Première visite du site :

INSERT INTO onlineusers (ip, datetime, userid, page, area, type)
VALUES (123.456.789.123, now(), 321, '/thispage', 'thisarea', 3)
ORDER BY id;
Copier après la connexion

Actualisation de chaque page :

UPDATE onlineusers (ip, datetime, page, area, type)
SET ip = 123.456.789.123,
    datetime = now(),
    page = '/thispage',
    area = 'thisarea',
    type = 3
WHERE id = 888
ORDER BY id;
Copier après la connexion

De plus, réécrivez la requête DELETE pour trier par id :

DELETE FROM onlineusers
WHERE id IN (
    SELECT id
    FROM onlineusers
    WHERE datetime < now() - INTERVAL 900 SECOND
    ORDER BY id
) u;
Copier après la connexion

En appliquant un ordre croissant sur les clauses WHERE, vous vous assurez que toutes les transactions verrouillent les clés dans le même ordre, évitant ainsi les blocages. Envisagez d'incorporer une logique de nouvelle tentative côté client pour gérer les tentatives potentielles en cas de blocage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal