

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation d'événements étendus avec Amazon RDS for Microsoft SQL Server
<a name="SQLServer.ExtendedEvents"></a>

Vous pouvez utiliser des événements étendus dans Microsoft SQL Server pour capturer des informations de débogage et de dépannage pour Amazon RDS for SQL Server. Les événements étendus remplacent SQL Trace et Server Profiler, qui ont été rendus obsolètes par Microsoft. Les événements étendus sont similaires aux traces du profileur, mais avec un contrôle plus granulaire sur les événements suivis. Les événements étendus sont pris en charge pour SQL Server versions 2016 et ultérieures sur Amazon RDS. Pour plus d'informations, consultez [Présentation des événements étendus](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events) dans la documentation Microsoft.

Les événements étendus sont activés automatiquement pour les utilisateurs disposant de privilèges d'utilisateur principal dans Amazon RDS for SQL Server.

**Topics**
+ [Limitations et recommandations](#SQLServer.ExtendedEvents.Limits)
+ [Configuration d'événements étendus sur RDS for SQL Server](#SQLServer.ExtendedEvents.Config)
+ [Considérations sur les déploiements multi-AZ](#SQLServer.ExtendedEvents.MAZ)
+ [Interrogation de fichiers d'événements étendus](#SQLServer.ExtendedEvents.Querying)

## Limitations et recommandations
<a name="SQLServer.ExtendedEvents.Limits"></a>

Lorsque vous utilisez des événements étendus sur RDS for SQL Server, les limitations suivantes s'appliquent :
+ Les événements étendus ne sont pris en charge que pour les éditions Enterprise et Standard.
+ Vous ne pouvez pas modifier les sessions d'événements étendus par défaut.
+ Assurez-vous de définir le mode de partition de mémoire de session sur `NONE`.
+ Le mode de rétention d'événement de session peut être `ALLOW_SINGLE_EVENT_LOSS` ou `ALLOW_MULTIPLE_EVENT_LOSS`.
+ Les cibles ETW (Event Tracing for Windows) ne sont pas prises en charge.
+ Assurez-vous que les cibles de fichiers se trouvent dans le répertoire `D:\rdsdbdata\log`.
+ Pour les cibles correspondant aux paire, définissez la propriété `respond_to_memory_pressure` sur `1`.
+ La mémoire cible de la mémoire tampon Ring ne peut pas être supérieure à 4 Mo.
+ Les actions suivantes ne sont pas prises en charge :
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ L'événement `rpc_completed` est pris en charge sur les versions suivantes et ultérieures : 15.0.4083.2, 14.0.3370.1, 13.0.5865.1, 12.0.6433.1, 11.0.7507.2.

## Configuration d'événements étendus sur RDS for SQL Server
<a name="SQLServer.ExtendedEvents.Config"></a>

Sur RDS for SQL Server, vous pouvez configurer les valeurs de certains paramètres des sessions d'événements étendus. Le tableau suivant décrit les paramètres configurables.


| Nom du paramètre | Description | Valeur par défaut RDS | Valeur minimale | Valeur maximale | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | Spécifie la quantité maximale de mémoire à allouer à la session pour la mise en mémoire tampon des événements. Cette valeur correspond au paramètre max\$1memory de la session d'événement. | 4 Mo | 4 Mo | 8 Mo | 
| xe\$1session\$1max\$1event\$1size | Spécifie la taille de mémoire maximale autorisée pour les événements volumineux. Cette valeur correspond au paramètre max\$1event\$1size de la session d'événement. | 4 Mo | 4 Mo | 8 Mo | 
| xe\$1session\$1max\$1dispatch\$1latency | Spécifie la durée pendant laquelle les événements sont mis en mémoire tampon avant d'être distribués aux cibles de session d'événements étendus. Cette valeur correspond au paramètre max\$1dispatch\$1latency de la session d'événement. | 30 secondes | 1 seconde | 30 secondes | 
| xe\$1file\$1target\$1size | Spécifie la taille maximale de la cible du fichier. Cette valeur correspond au paramètre max\$1file\$1size de la cible du fichier. | 100 Mo | 10 Mo | 1 Go | 
| xe\$1file\$1retention | Spécifie la durée de conservation en jours pour les fichiers générés par les cibles de fichiers des sessions d'événements. | 7 jours | 0 jour | 7 jours | 

**Note**  
La définition de `xe_file_retention` sur zéro entraîne la suppression automatique des fichiers .xel après la libération du verrouillage sur ces fichiers par SQL Server. Le verrouillage est libéré chaque fois qu'un fichier .xel atteint la limite de taille définie dans `xe_file_target_size`.

Vous pouvez utiliser la procédure `rdsadmin.dbo.rds_show_configuration` stockée pour afficher les valeurs actuelles de ces paramètres. Par exemple, utilisez l'instruction SQL suivante pour afficher le réglage actuel de `xe_session_max_memory`.

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

Vous pouvez utiliser la procédure stockée `rdsadmin.dbo.rds_set_configuration` pour les modifier. Par exemple, utilisez l'instruction SQL suivante pour définir `xe_session_max_memory` sur 4 Mo.

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## Considérations sur les déploiements multi-AZ
<a name="SQLServer.ExtendedEvents.MAZ"></a>

Lorsque vous créez une session d'événements étendus sur une instance de base de données principale, elle ne se propage pas au réplica de secours. Vous pouvez basculer et créer la session d'événements étendus sur la nouvelle instance de base de données principale. Vous pouvez également supprimer et lire la configuration multi-AZ pour propager la session d'événements étendus au réplica de secours. RDS arrête toutes les sessions d'événements étendus personnalisées sur le réplica de secours, de sorte que ces sessions ne consomment pas de ressources sur le réplica de secours. Pour cette raison, après qu'un réplica de secours devient l'instance de base de données principale, veillez à démarrer manuellement les sessions d'événements étendus sur la nouvelle instance principale.

**Note**  
Cette approche s'applique aux groupes de disponibilité Always On et à la mise en miroir de bases de données.

Vous pouvez également utiliser un travail SQL Server Agent pour suivre le réplica de secours et démarrer les sessions si le réplica de secours devient le réplica principal. Par exemple, utilisez la requête suivante dans votre étape du travail SQL Server Agent pour redémarrer les sessions d'événements sur une instance de base de données principale.

```
BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END
```

Cette requête redémarre les sessions d'événements `xe1` et `xe2` sur une instance de base de données principale si ces sessions sont à l'état arrêté. Vous pouvez également ajouter une planification avec un intervalle pratique à cette requête.

## Interrogation de fichiers d'événements étendus
<a name="SQLServer.ExtendedEvents.Querying"></a>

Vous pouvez utiliser SQL Server Management Studio ou la fonction `sys.fn_xe_file_target_read_file` pour afficher les données des événements étendus qui utilisent des cibles de fichiers. Pour plus d'informations sur cette fonction, consultez [sys.fn\$1xe\$1file\$1target\$1read\$1file (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql) dans la documentation Microsoft.

Les cibles de fichiers d'événements étendus peuvent uniquement écrire des fichiers dans le répertoire `D:\rdsdbdata\log` sur RDS SQL Server.

À titre d'exemple, utilisez la requête SQL suivante pour répertorier le contenu de tous les fichiers des sessions d'événements étendus dont les noms commencent par `xe`.

```
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);
```