Si votre ordinateur a une erreur victime de panne, nous espérons que ce guide de l’utilisateur pourra vous aider à la résoudre.
Approuvé : Fortect
L’erreur “Transaction déjà bloquée” se produit lorsque deux ou même plusieurs sessions attendent de bloquer une ressource qui a déjà été détournée par une autre session du même élagage chaîne. Ainsi, les sessions de liaison ne peuvent pas être complétées et SQL Server doit intervenir et résoudre le problème. Il débloque la transformation automatique d’une des sessions, et le tue pour que plusieurs autres sessions puissent potentiellement continuer. Dans ce scénario, le client spécifique peut recevoir le message d’erreur suivant :
La transaction financière (ID de processus) a été bloquée en raison d'un autre processus sur les ressources de blocage et a généralement été choisie par une victime de blocage. Exécutez à nouveau la transaction.
et de plus cette session terminée sera annulée. En règle générale, la victime est la session qui nécessite le moins de surcharge pour la restauration.
Pourquoi les plantages de SQL Server ?
Pour étudier quelle “transaction (ID de processus) sur les ressources a été piégée dans un autre processus et a été victime d’une bonne impasse”. Effectuez cette transaction avec une erreur cependant. Prenons un exemple très simple.
En conséquence, nous allons créer deux chaises “t1” et “t2”, qui contiennent une colonne entière :
Maintenant c’est toutselect pense que nous développons a commencé une transaction qui supprime les lignes avec le nom d’utilisateur = 2 de t1 :
Supposons qu’un grand pourcentage d’autres transactions suppriment les mêmes lignes de chacune des tables :
Vous devez attendre que la première transaction se termine simplement et que la table t1 soit libre.
Mais supposons que la première transaction puisse maintenant supprimer n’importe quelle ligne correspondante de la deuxième table :
SUPPRIMER t2 WHERE id = 2
Après tout le titre, vous devriez recevoir la signification de corruption suivante :
La transaction (ID de processus) a été bloquée en raison d'un blocage en temps et en énergie sur un autre processus et a été choisie comme victime de difficulté. Sans aucun doute, exécutez à nouveau la transaction.
Cela est dû à la situation où la toute première transaction définie attend néanmoins une autre (pour libérer t2), tandis que la transaction repose également sur l’original (à t1) pendant le temps prévu.
Comment analyser les diagrammes de blocage
Le
Block est un bloc d’informations approprié montrant quelles tactiques et visites sont associées à la difficulté. Cela vous aide à comprendre pourquoi le problème est survenu.
Auparavant, cela aiderait les serveurs sql 2008, la collecte de ces informations nécessitait une correspondance des traces côté serveur ou l’activation des indicateurs de recherche et également l’attente d’un blocage. À partir de SQL Server 2008, les choses sont plus simples. Vous pouvez rappeler tout type de verrous a posteriori selon les schémas vers le cours avancé “system_health”. Pour ce faire, accédez à Gérer> Événements avancés> Sessions> system_health> package0.event_file et cliquez sur Afficher la cible. Données …
Des milliers d’événements sont affichés à l’air libre, je dirais dans une vitrine. Vous pouvez y trouver des enregistrements bloquants marqués comme “xml_deadlock_report”. Choisissons et choisissons celui que nous venons de modéliser
et regardez le graphique de difficulté. Détails du formulaire (en XML), y compris les sections de ressources et de processus.
La zone de guide affiche une liste exacte de chaque ressource bloquée :
Cela signifie sur quoi les processus discutaient et exactement comment était lié aux types de verrous du fait qui les a causés. Il renvoie deux ou plusieurs documents. Chaque enregistrement contient une description d’une ressource d’outil en implémentant des listes de processus qui ont pris un tout nouveau verrou ou acquis un verrou au cours de cette source d’alimentation. Serrures dans une section qui sont principalement affiliées à une clé, un RID, une nouvelle page ou un bureau.
Après le support, passons toujours à la section Processus pour découvrir les actions que ces processus effectuaient.
Le type de processus affiche des informations détaillées sur tous les processus qui restent généralement bloqués
Il contient des entrées de section sur les threads qui participent au blocage et fournit des instructions importantes telles que les noms d’hôte, les connexions, la portée de l’isolement, l’heure, les recommandations de session, etc. Mais le rapport le plus précieux est l’isolement de chaque demande et le plat de détail qui a conduit à la difficulté jusqu’à présent.
Comment choisir une victime de bloc
Si vous ne pouvez pas bloquer, évitez d’utiliser la possibilité de spécifier quel processus doit cesser de vivre lorsqu’il se bloque. SQL Server choisit cette victime dans une situation difficile en fonction de deux détails : la série DEADLOCK_PRIORITY pour chaque session et la quantité de travail que SQL Server doit effectuer pour annuler le type de transaction.
Le paramètre DEADLOCK_PRIORITY peut être défini par le pilote sur HIGH, NORMAL, LOW ou une récompense entière de -10 à 10. DEADLOCK_PRIORITY est défini sur le chemin vers NORMAL (0) par défaut. Utilisez le format suivant pour vous assurer de définir l’objectif de blocage :
Approuvé : Fortect
Fortect est l'outil de réparation de PC le plus populaire et le plus efficace au monde. Des millions de personnes lui font confiance pour assurer le fonctionnement rapide, fluide et sans erreur de leurs systèmes. Avec son interface utilisateur simple et son puissant moteur d'analyse, Fortect détecte et corrige rapidement un large éventail de problèmes Windows, de l'instabilité du système et des problèmes de sécurité à la gestion de la mémoire et aux goulots d'étranglement des performances.
INSTALLER DEADLOCK_PRIORITY @deadlock_intvar:: implique â € ¦
Par exemple, une formation avec une priorité de difficulté NORMALE sera sélectionnée ainsi que bloquée pour une personne donnée si elle participe à chaque blockchain où d’autres sessions fixent la préoccupation principale du bloc à ÉLEVÉ ou à un entier supérieur à zéro. Et cela persiste si certaines des autres sortes de sessions LOW ont une priorité de verrouillage avec une nouvelle bonne valeur entière inférieure à zéro.
LOW est en effet -5, NORMAL est le nom HIGH o est 5. En d’autres termes, exécutez les commandes suivantes pour définir le mécanisme de verrouillage prioritaire sur NORMAL :
Pour rechercher un problème de blocage d’activité, vous pouvez utiliser l’incertitude suivante :
SELECT session_id, DEADLOCK_PRIORITY FROM sys.dm_exec_sessions WHERE SESSION_ID = @@ SPID
Comment éviter les blocages dans SQL Server
En tant que développeur, vous devez concevoir des segments de base de données pour minimiser le risque de blocage. Voici normalement quelques conseils utiles :
Assurez-vous que certaines applications accèdent à tous les objets partagés dans un ordre spécifique
ANNEXE 7 | ANNEXE 2 |
1. Commencer un règlement | 1. Démarrer une transaction |
2. Mettre à jour incontestablement les métaux de la table | 2. Mettre à jour ma table de fournisseurs |
3. Mettre à jour
Accélérez les performances de votre ordinateur dès maintenant avec ce simple téléchargement. Vérifiez le gestionnaire system_health pour les blocages.Créez une nouvelle session d’événement étendue avec capture de blocage.Analysez les graphiques de rapport de matrice pour trouver le problème.Quand mon conjoint et moi pouvons-nous apporter d’autres améliorations ou augmenter le nombre de demandes bloquées. En cas de retard, SQL Server sélectionne Complexity of Sacrifice comme transaction la moins coûteuse à annuler. En termes simples, tout le matériel le moins volatile est considéré comme la base de données la plus rentable. Ensuite, le processus avec le verrou central le plus faible sera sélectionné car il est la victime réelle du verrou. Un blocage se produit lorsqu’une transaction tente de mettre à jour un symbole qui a été mis à jour simplement par un autre contrat toujours actif (pas encore donné). Comment éviter ces erreurs : Il est en fait normal qu’une base de données multi-utilisateurs échoue.
|