

# Usar eventos estendidos com Amazon RDS for Microsoft SQL Server
<a name="SQLServer.ExtendedEvents"></a>

Você pode usar eventos estendidos no Microsoft SQL Server para capturar informações de depuração e solucionar problemas do Amazon RDS for SQL Server. Os eventos estendidos substituem o SQL Trace e o Server Profiler, que foram defasados pela Microsoft. Os eventos estendidos são semelhantes aos traços do Profiler, mas com controle mais granular nos eventos que estão sendo monitorados. Os eventos estendidos são compatíveis com as versões 2016 do SQL Server e posteriores do Amazon RDS. Para obter mais informações, consulte [Visão geral de eventos estendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events) na documentação da Microsoft.

Os eventos estendidos são ativados automaticamente para usuários com privilégios de usuário primário no Amazon RDS for SQL Server.

**Topics**
+ [Limitações e recomendações](#SQLServer.ExtendedEvents.Limits)
+ [Configuração de eventos estendidos no RDS for SQL Server](#SQLServer.ExtendedEvents.Config)
+ [Considerações para implantações Multi-AZ](#SQLServer.ExtendedEvents.MAZ)
+ [Consultando arquivos de eventos estendidos](#SQLServer.ExtendedEvents.Querying)

## Limitações e recomendações
<a name="SQLServer.ExtendedEvents.Limits"></a>

Ao usar eventos estendidos do RDS for SQL Server, as seguintes limitações se aplicam:
+ Os eventos estendidos são compatíveis apenas com as Edições Enterprise e Standard.
+ Você não pode alterar as sessões de eventos estendidos padrão.
+ Defina o modo de partição de memória de sessão como `NONE`.
+ O modo de retenção de eventos de sessão pode ser `ALLOW_SINGLE_EVENT_LOSS` ou `ALLOW_MULTIPLE_EVENT_LOSS`.
+ Os destinos de monitoramento de eventos para Windows (ETW) não são compatíveis.
+ Verifique se os destinos dos arquivo estão no diretório `D:\rdsdbdata\log`.
+ Para alvos de correspondência de pares, defina a propriedade `respond_to_memory_pressure` como `1`.
+ A memória de destino do buffer de anel não pode ser maior que 4 MB.
+ As seguintes ações não são aceitas:
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ O evento `rpc_completed` é compatível com as seguintes versões e posteriores: 15.0.4083.2, 14.0.3370.1, 13.0.5865.1, 12.0.6433.1, 11.0.7507.2

## Configuração de eventos estendidos no RDS for SQL Server
<a name="SQLServer.ExtendedEvents.Config"></a>

No RDS for SQL Server, você pode configurar os valores de determinados parâmetros de sessões de eventos estendidos. A tabela a seguir descreve os parâmetros configuráveis.


| Nome do parâmetro | Descrição | Valor padrão do RDS | Valor mínimo | Valor máximo | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | Especifica a quantidade máxima de memória a ser alocada à sessão para buffer de eventos. Esse valor corresponde à configuração max\$1memory da sessão do evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | Especifica o tamanho máximo de memória permitido para eventos grandes. Esse valor corresponde à configuração max\$1event\$1size da sessão do evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | Especifica a quantidade de tempo em que os eventos são armazenados em buffer na memória antes de serem despachados para destinos de sessão de eventos estendidos. Esse valor corresponde à configuração max\$1dispatch\$1latency da sessão do evento. | 30 segundos | 1 segundo | 30 segundos | 
| xe\$1file\$1target\$1size | Especifica o tamanho máximo do destino do arquivo. Esse valor corresponde à configuração max\$1file\$1size do destino do arquivo. | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | Especifica o tempo de retenção em dias para arquivos gerados pelos destinos de arquivo das sessões de evento. | 7 dias | 0 dias | 7 dias | 

**nota**  
Definir `xe_file_retention` como zero remove os arquivos.xel automaticamente depois que o bloqueio nesses arquivos é liberado pelo SQL Server. O bloqueio é liberado sempre que um arquivo.xel atinge o limite de tamanho definido em `xe_file_target_size`.

Você pode usar o procedimento `rdsadmin.dbo.rds_show_configuration` armazenado para mostrar os valores atuais desses parâmetros. Por exemplo, use a instrução SQL a seguir para visualizar a configuração atual do `xe_session_max_memory`.

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

Você pode usar o procedimento `rdsadmin.dbo.rds_set_configuration` armazenado para modificá-los. Por exemplo, use a instrução SQL `xe_session_max_memory` a seguir para definir como 4 MB.

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

## Considerações para implantações Multi-AZ
<a name="SQLServer.ExtendedEvents.MAZ"></a>

Quando você cria uma sessão de evento estendida em uma instância de banco de dados principal, ela não se propaga para a réplica em espera. Você pode fazer failover e criar a sessão de evento estendida na nova instância de banco de dados principal. Ou você pode remover e ler a configuração Multi-AZ para propagar a sessão de evento estendida para a réplica em espera. O RDS interrompe todas as sessões de evento estendidas não padrão na réplica em espera, de modo que essas sessões não consumam recursos no modo de espera. Por isso, depois que uma réplica em espera se tornar a instância de banco de dados principal, inicie manualmente as sessões de eventos estendidas no novo primário.

**nota**  
Essa abordagem se aplica a grupos de disponibilidade sempre ativos e ao espelhamento do banco de dados.

Você também pode usar um trabalho do SQL Server Agent para monitorar a réplica em espera e iniciar as sessões se a espera se tornar a primária. Por exemplo, use a consulta a seguir na etapa de trabalho do SQL Server Agent para reiniciar sessões de evento em uma instância de banco de dados 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
```

Essa consulta reinicia as sessões de evento `xe1` e `xe2` em uma instância de banco de dados principal se essas sessões estiverem em um estado interrompido. Você também pode adicionar uma programação com um intervalo conveniente a essa consulta.

## Consultando arquivos de eventos estendidos
<a name="SQLServer.ExtendedEvents.Querying"></a>

Você pode usar o SQL Server Management Studio ou a função `sys.fn_xe_file_target_read_file` para visualizar dados de eventos estendidos que usam destinos de arquivo. Para obter mais informações sobre essa função, 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) na documentação da Microsoft.

Destinos de arquivos de eventos estendidos só podem gravar arquivos no diretório `D:\rdsdbdata\log` no RDS para SQL Server.

Como exemplo, use a consulta SQL a seguir para listar o conteúdo de todos os arquivos de sessões de eventos estendidos cujos nomes começam com `xe`.

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