Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server 2005 : Alertes par emails lors d’Inter blocages (DeadLocks)

Un deadlock (ou inter blocage en français, même si cette traduction n'est pas totalement exacte) est une situation où une ou plusieurs connexion se retrouve à demander une ressources bloquée par l'une des autres sessions. Dans cette situation le moteur de base de données demande la recherche du blocage, s'il s'avère qu'il ne peut être résolu, le serveur met fin à une ou plusieurs sessions.

C'est dans cette situation que vous récupérez le fameux message « Vous avez été victime d'une deadlock » qui depuis a dû être traduit plus joliment.

Comment résoudre ce problème… Au niveau applicatif tracez l'erreur 1205 au niveau de la propriété Number de la classe SqlException et ré exécutez la même requête. Faites une boucle avec 10 itérations par exemples, attendez quelques secondes entre chaque passage, si vous tombez sur l'erreur continuez la boucle et ré exécutez la commande jusqu'à ce qu'elle passe. Vous avez plus de 99,9% de chance de réussir à exécutez la commande et bien avant d'atteindre la 10ème itération.

Comment savoir qu'il s'est produit un deadloack ? Vous pouvez loguer l'information du côté applicatif, mais vous n'aurez pas assez d'informations pour connaître toutes les sessions impliquées dans le blocage.

SQL Server 2005 arrive avec 2 nouveautés très intéressantes, l'une appelée alerte WMI et l'autre le Deadlock Graph. La première permet d'écrire une requête WMI (Windows Management Instrumentation) qui en fonction des paramètres (taille d'une base de données, espace disque, etc.) de la requête va se déclencher et permettra par exemple l'envoie d'un email. La seconde permet d'envoyer en xml, les données du DeadLock, contenant les requêtes et les sessions impliquées. Cet xml peut être affiché de manière graphique dans le Générateur de Profil (SQL Profiler).

Voici le code SQL pour créer ce genre d'alerte :

USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert @name=N'DeadLock',
        @enabled=1,
        @delay_between_responses=0,
        @include_event_description_in=1,
        @wmi_namespace=N'\\.\root\Microsoft\SqlServer\ServerEvents\YYYYYY',
        @wmi_query=N'Select * From DEADLOCK_GRAPH'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'DeadLock', @operator_name=N'xxxxxxx', @notification_method = 1

Remplacez YYYYYY par le nom de votre instance. Pour l'instance par défaut mettez MSSQLSERVER.

Il a plusieurs pré-requis, que vous ayez tout d'abord configuré le système d'envoie d'email de SQL Server, et que vous ayez configuré un opérateur (ici xxxxxxx) dans l'agent SQL qui est une adresse email. Ajoutez autant de ap_add_notification que vous avez d'opérateurs à notifier. Le temps entre les réponses est réglé à 0 pour éviter de « perdre » un deadlock au niveau de la notification.

Cette solution fonctionne sur SQL Server 2005, uniquement sur les éditions commerciales, l'édition Express n'ayant pas d'agent.

Bon tests de verrous…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié lundi 7 mai 2007 15:20 par christian

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01