Impasse
Ce qu'on appelle l'impasse : fait référence à deux ou plusieurs processus au cours du processus d'exécution, en raison de conflits. Un phénomène d'attente mutuelle causés par les ressources. Sans force extérieure, ils ne pourront pas avancer. À ce moment-là, on dit que le système est dans un état de blocage ou que le système est dans une impasse. Ces processus qui s'attendent toujours les uns les autres sont appelés processus de blocage.
Étant donné que l'occupation des ressources est mutuellement exclusive, lorsqu'un processus demande des ressources, le processus concerné ne se verra jamais attribuer les ressources nécessaires et ne pourra pas continuer à fonctionner sans aide extérieure. Cela crée une situation d'impasse particulière.
Une situation dans laquelle deux ou plusieurs threads du programme d'exécution sont définitivement bloqués (en attente) et chaque thread attend des ressources occupées et bloquées par d'autres threads. Par exemple, si le thread A verrouille l'enregistrement 1 et attend l'enregistrement 2 et que le thread B verrouille l'enregistrement 2 et attend l'enregistrement 1, un blocage se produit entre les deux threads.
Dans un système informatique, si la stratégie d'allocation des ressources du système est inappropriée, ou plus communément, si le programme écrit par le programmeur contient des erreurs, etc., cela entraînera une impasse du processus en raison d'une concurrence inappropriée pour les ressources.
Il existe de nombreuses façons d'implémenter des verrous, tels que les verrous d'intention, les verrous partagés-exclusifs, les tables de verrouillage, les protocoles d'arborescence, les protocoles d'horodatage, etc. Les verrous ont également plusieurs granularités. Par exemple, vous pouvez verrouiller sur une table ou sur un enregistrement.
Les principales raisons du blocage sont :
(1) Ressources système insuffisantes.
(2) L'ordre d'exécution et d'avancement du processus est inapproprié.
(3) Mauvaise allocation des ressources, etc.
Si les ressources du système sont suffisantes et que les demandes de ressources du processus peuvent être satisfaites, la possibilité d'une impasse est très faible. Sinon, il tombera dans une impasse en raison de la concurrence pour des ressources limitées. Deuxièmement, si l’ordre d’exécution et la vitesse du processus sont différents, un blocage peut également se produire.
Quatre conditions nécessaires à une impasse :
(1) Condition d'exclusion mutuelle : Une ressource ne peut être utilisée que par un seul processus à la fois.
(2) Conditions de demande et de conservation : lorsqu'un processus est bloqué en raison d'une demande de ressources, il conservera les ressources obtenues.
(3) Condition de non-privation : Les ressources obtenues par le processus ne peuvent pas en être privées de force avant qu'elles ne soient épuisées.
(4) Condition d'attente de boucle : une relation de boucle tête-bêche en attente de ressources est formée entre plusieurs processus.
Ces quatre conditions sont des conditions nécessaires pour un blocage. Tant qu'un blocage se produit dans le système, ces conditions doivent être vraies. Tant qu'une des conditions ci-dessus n'est pas remplie, un blocage ne se produira pas.
Prévention et soulagement des blocages :
Comprendre les causes des blocages, en particulier les quatre conditions nécessaires aux blocages, vous pouvez les éviter autant que possible. Prévenir et résoudre. des impasses. Par conséquent, en termes de conception du système, de planification des processus, etc., faites attention à la manière d'empêcher l'établissement de ces quatre conditions nécessaires et à la manière de déterminer un algorithme d'allocation de ressources raisonnable pour éviter que les processus n'occupent en permanence les ressources du système.
De plus, il est également nécessaire d'empêcher le processus d'occuper des ressources alors qu'il est en état d'attente. Pendant le fonctionnement du système, chaque demande de ressources émise par le processus que le système peut satisfaire est vérifiée dynamiquement, et sur la base des résultats de la vérification, une décision est prise si le système doit être alloué. Si le système peut se bloquer après l'allocation, il ne sera pas alloué, sinon il le sera. L’allocation des ressources doit donc être correctement planifiée.
Comment minimiser les blocages
Bien que les blocages ne puissent pas être complètement évités, le nombre de blocages peut être minimisé. La réduction des blocages augmente le débit des transactions et réduit la surcharge du système, car peu de transactions sont annulées, ce qui annule tout le travail effectué par la transaction. Soumis à nouveau par l'application en raison d'un retour en arrière en cas de blocage.
Les méthodes suivantes permettent de minimiser les blocages :
(1) Accédez aux objets dans le même ordre.
(2) Évitez l'interaction des utilisateurs dans les transactions.
(3) Gardez les transactions courtes et groupées.
(4) Utilisez un faible niveau d'isolement.
(5) Utilisez une connexion contraignante.
1. Accédez aux objets dans le même ordre
Si toutes les transactions simultanées accèdent aux objets dans le même ordre, la possibilité de blocage sera réduite. Par exemple, si deux transactions simultanées acquièrent un verrou sur la table Fournisseur, puis un verrou sur la table Partie, une transaction est bloquée sur la table Fournisseur jusqu'à ce que l'autre transaction se termine. Une fois la première transaction validée ou annulée, la deuxième transaction continue. Aucune impasse ne se produit. L'utilisation de procédures stockées pour toutes les modifications de données standardise l'ordre dans lequel les objets sont accédés.
2. Évitez l'interaction de l'utilisateur dans les transactions
Évitez d'écrire des transactions qui incluent une interaction de l'utilisateur, car l'exécution de lots sans interaction de l'utilisateur est beaucoup plus rapide que la réponse manuelle des utilisateurs aux requêtes, par exemple. demander les paramètres de la demande. Par exemple, si une transaction attend la saisie de l'utilisateur et que l'utilisateur va déjeuner ou même rentre chez lui pour le week-end, l'utilisateur suspend la transaction afin qu'elle ne puisse pas être terminée. Cela réduira le débit du système, car les verrous détenus par la transaction ne seront pas libérés tant que la transaction ne sera pas validée ou annulée. Même si aucun blocage ne se produit, les autres transactions accédant à la même ressource seront bloquées, en attendant la fin de la transaction.
3. Gardez les transactions courtes et groupées
Des blocages se produisent souvent lorsque plusieurs transactions de longue durée sont exécutées simultanément dans la même base de données. Plus une transaction s'exécute longtemps, plus elle détient un verrou exclusif ou de mise à jour, bloquant d'autres activités et pouvant provoquer un blocage.
Conserver les transactions dans un lot peut minimiser le nombre d'allers-retours de communication réseau pour les transactions, réduire les retards possibles dans l'exécution des transactions et libérer les verrous.
4. Utiliser un niveau d'isolement faible
Déterminez si la transaction peut s'exécuter à un niveau d'isolement inférieur. L'exécution d'une lecture validée permet à une transaction de lire des données qui ont été lues (non modifiées) par une autre transaction sans avoir à attendre la fin de la première transaction. L’utilisation d’un niveau d’isolement inférieur (tel que Read Comended) au lieu d’un niveau d’isolement plus élevé (tel que Serialisable Read) réduit la durée de maintien d’un verrou partagé, réduisant ainsi les conflits de verrouillage.
5. Utilisez des connexions liées
Utilisez des connexions liées afin que deux ou plusieurs connexions ouvertes par la même application puissent coopérer entre elles. Tout verrou acquis par une connexion secondaire peut être maintenu comme un verrou acquis par la connexion principale et vice versa, afin qu'ils ne se bloquent pas.
6. Utilisez des procédures stockées pour découvrir le processus et l'instruction SQL qui ont provoqué le blocage.
Si un blocage se produit, comment détecter quelle instruction SQL ou procédure stockée a causé le blocage ? À ce stade, nous pouvons utiliser la procédure stockée suivante pour détecter et découvrir le processus et l'instruction SQL à l'origine du blocage.
Recommandations associées : "Tutoriel mysql"
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!