peut se produire si interblocages vous avez deux ou plusieurs requêtes indépendantes ayant accès aux mêmes ressources (tables/lignes) en même temps un exemple du monde réel.
Deux mécaniciens travaillent À un moment donné pendant la réparation, ils ont tous deux besoin d'un tournevis et d'un marteau pour desserrer la partie grippée.Le mécanicien A saisit le tournevis, le mécanicien B saisit le marteau et ne peut plus continuer, comme le deuxième outil dont ils ont besoin n'est pas disponible: ils sont dans l'impasse
Maintenant, les humains sont intelligents et l'un des mécaniciens sera courtois et livrera leur outil à l'autre: les deux peuvent continuer à travailler. stupide, et aucune requête ne sera gracieuse et déverrouiller quelle que soit la ressource qui cause l'impasse. À ce stade, le SGBD va activer Rambo et forcer un retour (ou simplement tuer) une ou plusieurs des requêtes mutuellement verrouillées. Cela permettra à une requête chanceuse de continuer et d'obtenir les verrous/transactions dont elle a besoin, et nous espérons que ceux qui ont été abandonnés auront des applications suffisamment intelligentes pour les gérer, ce qui relancera les transactions plus tard. Sur les SGBD plus anciens/plus simples, le système entier s'arrêterait jusqu'à ce que le DBA soit entré et ait fait un nettoyage manuel.
Il existe de nombreuses méthodes pour gérer les interblocages et les éviter en premier lieu. Une grande est de ne jamais verrouiller les ressources dans des ordres "aléatoires". Dans le cas de notre mécanicien, les deux doivent d'abord atteindre le tournevis, avant d'atteindre le marteau. De cette façon, on peut travailler immédiatement avec succès, tandis que l'autre saura qu'il doit attendre. En ce qui concerne le mélange InnodB/MyISAM - MySQL prend entièrement en charge les types de table de mélange/correspondance dans les requêtes. Vous pouvez sélectionner/joindre/mettre à jour/insérer/supprimer/modifier dans l'ordre que vous voulez, rappelez-vous simplement que faire quoi que ce soit à une table MyISAM dans une transaction InnoDB ne rendra pas MyISAM magiquement conscient des transactions. Les parties MyISAM vont s'exécuter/commettre immédiatement, et si vous annulez le côté InnoDB des choses, MyISAM ne reviendra pas aussi bien.
La seule raison majeure de rester avec MyISAM ces jours-ci est sa prise en charge de l'indexation de texte intégral. Autre que cela, InnoDB sera généralement le meilleur choix, car il a une prise en charge complète des transactions et le verrouillage au niveau des lignes.
Il ne devrait pas y avoir de problème pour passer de MyISAM à InnoDB, si vous n'avez pas besoin d'une fonctionnalité spécifique à MyISAM, comme la recherche Fulltext ou la table complète rapide 'COUNT (*)' s. MyISAM est *** pas *** plus rapide que InnoDB, InnoDB n'est pas plus rapide que MyISAM. L'un se comporte mieux dans une occasion, l'autre dans une autre. En fait, je suis passé à InnoDB parce que c'était beaucoup plus performant sur les tables avec beaucoup d'écritures, car il utilise le verrouillage de niveau de ligne au lieu du verrouillage de niveau table de MyISAM. Donc, si vous n'avez pas besoin d'une fonctionnalité spécifique à MyISAM, ne craignez pas de changer;) – NikiC
qu'en est-il de l'impasse qui pourrait être ma principale douleur dans un ** je vais à InnoDB. J'ai déjà utilisé ce moteur mais jamais sur une grosse DB. Maintenant, je suis workign sur une application qui utilise de nombreux DB (plus de 40), chacun d'entre eux est de 10-20 Mo. Ce n'est pas beaucoup, mais il y a encore beaucoup de données. –