

# Uso de eventos extendidos con Amazon RDS for Microsoft SQL Server
<a name="SQLServer.ExtendedEvents"></a>

Puede utilizar eventos extendidos en Microsoft SQL Server para capturar información de depuración y solución de problemas para Amazon RDS for SQL Server. Los eventos extendidos reemplazan SQL Trace y Server Profiler, los cuales Microsoft ha dado de baja. Los eventos extendidos son similares a los trazados del generador de perfiles, pero con un control más granular sobre los eventos que se rastrean. Los eventos extendidos son compatibles con las versiones de SQL Server 2016 y posteriores en Amazon RDS. Para obtener más información, consulte [Información general de eventos extendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events) en la documentación de Microsoft.

Los eventos extendidos se activan automáticamente para los usuarios con privilegios de usuario maestro en Amazon RDS for SQL Server.

**Topics**
+ [Limitaciones y recomendaciones](#SQLServer.ExtendedEvents.Limits)
+ [Configuración de eventos extendidos en RDS for SQL Server](#SQLServer.ExtendedEvents.Config)
+ [Consideraciones para implementaciones Multi-AZ](#SQLServer.ExtendedEvents.MAZ)
+ [Consultar archivos de eventos extendidos](#SQLServer.ExtendedEvents.Querying)

## Limitaciones y recomendaciones
<a name="SQLServer.ExtendedEvents.Limits"></a>

Al utilizar eventos extendidos en RDS for SQL Server, se aplican las siguientes limitaciones:
+ Los eventos extendidos solo se admiten para las ediciones Enterprise y Standard.
+ No puede modificar las sesiones de eventos extendidos predeterminadas.
+ Asegúrese de establecer el modo de partición de memoria de sesión en `NONE`.
+ El modo de retención de eventos de sesión puede ser `ALLOW_SINGLE_EVENT_LOSS` o `ALLOW_MULTIPLE_EVENT_LOSS`.
+ No se admiten los destinos de seguimiento de eventos para Windows (ETW).
+ Asegúrese de que los destinos de los archivos estén en el directorio `D:\rdsdbdata\log`.
+ Para destinos coincidentes de pares, establezca la propiedad `respond_to_memory_pressure` en `1`.
+ La memoria de destino del búfer de anillo no puede ser superior a 4 MB.
+ No se admiten las siguientes acciones:
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ El evento `rpc_completed` se admite en las siguientes versiones y versiones posteriores: 15.0.4083.2, 14.0.3370.1, 13.0.5865.1, 12.0.6433.1, 11.0.7507.2.

## Configuración de eventos extendidos en RDS for SQL Server
<a name="SQLServer.ExtendedEvents.Config"></a>

En RDS for SQL Server, puede configurar los valores de ciertos parámetros de sesiones de eventos extendidos. En la siguiente tabla, se describen los parámetros configurables.


| Nombre del parámetro | Descripción | Valor predeterminado de RDS | Valor mínimo | Valor máximo | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | Especifica la cantidad máxima de memoria que se asignará a la sesión para el almacenamiento en búfer de eventos. Este valor corresponde a la configuración max\$1memory de la sesión de evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | Especifica el tamaño máximo de memoria permitido para eventos grandes. Este valor corresponde a la configuración max\$1event\$1size de la sesión de evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | Especifica la cantidad de tiempo que los eventos se almacenan en búfer en la memoria antes de que se distribuyan a destinos de sesión de eventos extendidos. Este valor corresponde a la configuración max\$1dispatch\$1latency de la sesión de evento. | 30 segundos | 1 segundo | 30 segundos | 
| xe\$1file\$1target\$1size | Especifica el tamaño máximo del destino del archivo. Este valor corresponde a la configuración max\$1file\$1size del destino del archivo. | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | Especifica el tiempo de retención en días para los archivos generados por los destinos de archivo de las sesiones de eventos. | 7 días | 0 días | 7 días | 

**nota**  
Si `xe_file_retention` se establece en cero, los archivos.xel se quitarán automáticamente después de que SQL Server libere el bloqueo de estos archivos. El bloqueo se libera cada vez que un archivo.xel alcanza el límite de tamaño establecido en `xe_file_target_size`.

Puede utilizar el procedimiento `rdsadmin.dbo.rds_show_configuration` almacenado para mostrar los valores actuales de estos parámetros. Por ejemplo, utilice la siguiente instrucción SQL para ver la configuración actual de `xe_session_max_memory`.

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

Puede utilizar el procedimiento `rdsadmin.dbo.rds_set_configuration` almacenado para modificarlos. Por ejemplo, utilice la siguiente instrucción SQL para establecer `xe_session_max_memory` en 4 MB.

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

## Consideraciones para implementaciones Multi-AZ
<a name="SQLServer.ExtendedEvents.MAZ"></a>

Cuando crea una sesión de evento extendida en una instancia de base de datos principal, no se propaga a la réplica en espera. Puede conmutar por error y crear la sesión de evento extendida en la nueva instancia de base de datos principal. También puede quitar y volver a agregar la configuración Multi-AZ para propagar la sesión de eventos extendida a la réplica en espera. RDS detiene todas las sesiones de eventos extendidos no predeterminadas en la réplica en espera, de modo que estas sesiones no consumen recursos en el modo de espera. Debido a esto, después de que una réplica en espera se convierta en la instancia de base de datos principal, asegúrese de iniciar manualmente las sesiones de evento extendidas en la nueva instancia primaria.

**nota**  
Este enfoque se aplica tanto a los grupos de disponibilidad siempre activa como a la creación de reflejo de bases de datos.

También puede utilizar un trabajo de SQL Server Agent para realizar un seguimiento de la réplica en espera e iniciar las sesiones si el modo en espera se convierte en el principal. Por ejemplo, utilice la siguiente consulta en el paso de trabajo del Agente SQL Server para reiniciar sesiones de eventos en una instancia de base de datos principal.

```
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
```

Esta consulta reinicia las sesiones de eventos `xe1` y `xe2` en una instancia de base de datos principal si estas sesiones están en un estado detenido. También puede agregar una programación con un intervalo conveniente a esta consulta.

## Consultar archivos de eventos extendidos
<a name="SQLServer.ExtendedEvents.Querying"></a>

Puede utilizar SQL Server Management Studio o la función `sys.fn_xe_file_target_read_file` para ver datos de eventos extendidos que utilizan destinos de archivo. Para obtener más información sobre esta función, consulte [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) en la documentación de Microsoft.

Los destinos de archivos de eventos extendidos solo pueden escribir archivos en el directorio `D:\rdsdbdata\log` en RDS for SQL Server.

Como ejemplo, utilice la siguiente consulta SQL para enumerar el contenido de todos los archivos de sesiones de eventos extendidos cuyos nombres comiencen por `xe`.

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