Comment recevoir une notification lorsqu'un événement de blocage se produit sur mon instance de base de données Amazon RDS SQL Server ?

Lecture de 6 minute(s)
0

Je dispose d'une instance Amazon Relational Database Service (Amazon RDS) qui exécute SQL Server. Je souhaite être averti dès qu'un événement de blocage se produit sur mon instance de base de données RDS. Comment faire ?

Description courte

SQL Server utilise un thread de surveillance de verrouillage pour surveiller les événements de blocage. Si un événement de blocage est détecté, SQL Server utilise un mécanisme basé sur les ressources/les coûts pour déclarer l'une des transactions comme étant une victime du blocage. La transaction de la victime est annulée et le code d'erreur 1205 est publié dans les journaux d'erreurs.

Pour résoudre ce problème, activez les indicateurs de suivi de blocage (1222, 1204) pour saisir les événements de blocage dans les journaux d'erreurs SQL. Publiez ensuite les journaux d'erreurs SQL Server dans Amazon CloudWatch et créez des alarmes CloudWatch et des notifications Amazon Simple Notification Service (Amazon SNS) qui envoient une alerte à chaque fois qu'un événement de blocage se produit.

Solution

Activer les indicateurs de suivi via les groupes de paramètres RDS

Remarque : si vous avez un groupe de paramètres personnalisé existant, passez directement à l'étape 5.

  1. Ouvrez la console Amazon RDS, puis sélectionnezParameter groups (Groupes de paramètres) dans le volet de navigation.
  2. Sélectionnez Create parameter group (Créer un groupe de paramètres).
  3. Pour Parameter group family (Famille de groupes de paramètres), choisissez la version et l'édition SQL Server que vous utilisez. Par exemple, SQL Server 2016 Enterprise Edition utilise sqlserver-ee-13.0.
  4. Renseignez les champs Group name (Nom de groupe) et Description, puis sélectionnez Create (Créer).
  5. Sur la page Parameter groups (Groupes de paramètres), choisissez le groupe que vous avez créé à l'étape précédente.
  6. Choisissez Edit parameters (Modifier les paramètres) et cochez la case en regard de 1204 et 1222.
  7. Modifiez le champ Values (Valeurs) de 1204 et 1222 pour choisir 1.
  8. Sélectionnez Preview changes (Prévisualiser les modifications). Sur la page suivante, sélectionnez Save changes (Enregistrer les modifications).
  9. Sélectionnez Databases(Bases de données) dans le volet de navigation.
  10. Dans la section DB identifier (Identifiant de base de données), choisissez votre instance de base de données RDS.
  11. Sélectionnez Modify (Modifier).
  12. Dans la section Database options (Options de base de données), pour DB parameter group (Groupe de paramètres de base de données), choisissez le groupe de paramètres que vous avez créé.Remarque: la création d'un groupe de paramètres et son association à une instance de base de données RDS nécessite que vous redémarriez l'instance de base de données RDS pour que les modifications prennent effet.

Envoi des journaux d'erreurs SQL Server vers Amazon CloudWatch

  1. Dans la section Error logs (Journaux d'erreurs), cochez la case Error log (Journal des erreurs). Cela permet de s'assurer que les journaux d'erreurs SQL Server soient publiés dans CloudWatch Logs.
  2. Sélectionnez Continue (Continuer).
  3. Dans la section Scheduling of modifications (Planification des modifications), choisissez Apply immediately (Appliquer immédiatement), puis Modify DB Instance (Modifier l'instance de base de données).Remarque : votre instance de base de données RDS est maintenant à l'état Modifying (Modification en cours). Attendez qu'elle soit revenue à l'état Available (Disponible). Si vous avez utilisé un groupe de paramètres existant, ignorez l'étape 4, car vous n'avez pas besoin de redémarrer votre instance de base de données RDS. Si vous avez créé un nouveau groupe de paramètres, passez à l'étape 4.
  4. Sur la page Databases (Bases de données), choisissez votre instance de base de données RDS, puis sélectionnez Actions. Redémarrez l'instance de base de données RDS pour que les modifications prennent effet.

Une fois que l'instance de base de données RDS est en ligne, vous pouvez vérifier le statut de suivi du blocage en exécutant DBCC TRACESTATUS (1222, 1204) sur votre instance de base de données RDS. Si la commande Global trace (Suivi global) renvoie 1 dans les fenêtres de sortie, le suivi de blocage est activé.

Simulation d'une transaction de blocage

Simulez une transaction de blocage sur votre instance de base de données RDS pour valider si les requêtes de la victime du blocage sont consignées dans les journaux d'erreurs SQL Server. Vous pouvez vérifier les événements de blocage dans les journaux d'erreurs SQL Server en exécutant la requête suivante sur votre instance de base de données RDS :

sp_readerrorlog 0, 1, 'deadlock'

Créer un modèle de filtre et une alarme Amazon CloudWatch

  1. Ouvrez la console CloudWatch.
  2. Dans la section Logs (Journaux), choisissez Log groups(Groupes de journaux).
  3. Choisissez les journaux d'erreurs SQL Server de votre instance de base de données RDS. Les journaux sont répertoriés au format suivant :(/aws/rds/instance/ <Nom-votre-instance-RDS>/error)
  4. Sélectionnez Create metric filter (Créer un filtre de métriques).
  5. Sur la page Define Logs Metric Filter (Définir le filtre de métriques des journaux) dans la section Filter Pattern (Modèle de filtre), entrez Deadlock (Blocage).
  6. Sélectionnez Assign metric (Affecter une métrique).
  7. Entrez Deadlock (Blocage) dans les champs Filter Name (Nom du filtre) et Metric Name (Nom de métrique).
  8. Sélectionnez Create Filter (Créer un filtre). Une fois le filtre de blocage créé, sélectionnez Creat alarm (Créer une alarme).
  9. Sur la page Specify metric and conditions (Préciser la métrique et les conditions) sous Metric name (Nom de métrique), entrez Deadlock (Blocage).
  10. Sous Statistic (Statistique), entrez Minimum.
  11. Sous Period (Période), dans le menu déroulant, choisissez la période de l'alarme, par exemple 1 minute.
  12. Dans la section Conditions, sélectionnez les paramètres suivants :

Threshod type (Type de seuil) : Static (Statique)

Whenever Deadlock is (Quand le blocage est) : Greater > threshold (Plus grand > seuil)

Than (que) : saisissez 0 13. Sélectionnez Next (Suivant). 14. Dans la section Notification sous Alarm state trigger (Déclencheur de l'état d'alarme), choisissez In alarm (en état d'alarme). 15. Sélectionnez une rubrique Amazon SNS, ou Create new topic (Créer une rubrique) en utilisant l'adresse e-mail à laquelle vous souhaitez recevoir des alertes, puis sélectionnez Next (Suivant). 16. Dans la section Name and description (Nom et description), renseignez les champs Alarm name (Nom de l'alarme) et Alarm description (Description de l'alarme), puis sélectionnez Next (Suivant). 17. Sur la page Preview and create (Prévisualiser et créer), vérifiez la configuration de votre alarme, puis sélectionnez Create alarm (Créer l'alarme).

Utilisez le même processus pour créer des alarmes CloudWatch pour d'autres erreurs SQL Server fatales et des erreurs d'échec de connexion. Cela vous permet d'identifier et de recevoir des notifications sur de nombreuses erreurs SQL Server avant que le système de base de données ne rencontre un problème majeur.


Informations connexes

Fichiers journaux de base de données MySQL