Maison > base de données > tutoriel mysql > Comment puis-je éviter les blocages dans MySQL ?

Comment puis-je éviter les blocages dans MySQL ?

Linda Hamilton
Libérer: 2024-12-14 07:51:11
original
833 Les gens l'ont consulté

How Can I Prevent Deadlocks in MySQL?

Comment éviter les blocages dans MySQL

Les blocages sont un problème courant dans les systèmes de bases de données, qui peuvent entraîner des problèmes de performances importants. Dans MySQL, des blocages se produisent lorsque deux threads ou plus tentent de verrouiller les mêmes ressources dans des ordres opposés.

Comprendre les blocages

Analysons un scénario de blocage typique :

  • Connexion 1 : Verrouille la clé (1) puis essaie de verrouiller key(2).
  • Connexion 2 : Verrouille la clé(2), puis essaie de verrouiller la clé(1).

Si les deux connexions s'exécutent simultanément, une impasse se produit puisque les deux attendent l'un l'autre pour libérer les clés verrouillées.

Éviter Interblocages

Pour éviter les interblocages, il est crucial de garantir que les connexions verrouillent les clés dans le même ordre.

Réorganiser les requêtes

  • Requêtes non sujettes aux blocages : Pour les requêtes qui ne verrouillent pas plusieurs clés, l'ordre est non pertinent.
  • Requêtes sujettes aux blocages : Pour les requêtes qui verrouillent plusieurs clés, telles que vos instructions UPDATE et DELETE, réorganisez les clauses WHERE pour utiliser un ordre croissant pour les clés. Cela garantit un ordre de verrouillage cohérent sur toutes les connexions.

Exemple

Dans votre cas spécifique, l'instruction DELETE doit être modifiée comme suit :

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 utilisant cette approche de sous-requête, l'opération DELETE verrouillera les lignes dans l'ordre croissant de la colonne id, évitant ainsi les potentiels blocages.

Logique de nouvelle tentative côté client

Si des blocages surviennent toujours dans votre système, il est recommandé d'implémenter une logique de nouvelle tentative côté client. Cela implique que le client réessaye automatiquement l'opération plusieurs fois (par exemple, trois tentatives) en cas d'erreur 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