Usar a sessão system_health

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

A sessão system_health é uma sessão de Eventos Estendidos incluída por padrão no SQL Server e na Instância Gerenciada de SQL do Azure. Ela é iniciada automaticamente quando o mecanismo de banco de dados é iniciado e é executada sem nenhuma sobrecarga de desempenho perceptível. A sessão coleta dados do sistema que você pode usar para ajudar a solucionar problemas de desempenho no mecanismo de banco de dados.

Importante

Recomendamos que você não interrompa, altere ou exclua a sessão system_health. Todas as alterações feitas nas configurações da sessão system_health podem ser substituídas por uma futura atualização do produto.

As informações coletadas pela sessão, incluem as seguintes informações:

  • sql_text e session_id para todas as sessões que se depararem com um erro com gravidade >= 20.
  • sql_text e session_id para todas as sessões que se depararem com um erro relacionado a memória. Os erros incluem 17803, 701, 802, 8645, 8651, 8657 e 8902.
  • Um registro de qualquer problema de agendador que não esteja respondendo. Eles aparecem no log de erros do SQL Server como erro 17883.
  • Qualquer deadlock detectado, incluindo o gráfico de deadlock.
  • callstack, sql_text e session_id para todas as sessões que esperaram em travas (ou outros recursos interessantes) por > 15 segundos.
  • callstack, sql_text e session_id para todas as sessões que esperaram em bloqueios por > 30 segundos.
  • callstack, sql_text e session_id para todas as sessões que aguardaram muito tempo por esperas preemptivas. A duração varia de acordo com o tipo de espera. Uma espera preventiva ocorre quando o SQL Server está esperando por chamadas de API externas.
  • callstack e session_id para alocação de CLR e falhas de alocação virtual.
  • Os eventos de buffer de anel para o agente de memória, monitor de agendador, OOM de nó de memória, segurança e conectividade.
  • Resultados de componente do sistema de sp_server_diagnostics.
  • Integridade da instância coletada por scheduler_monitor_system_health_ring_buffer_recorded.
  • Falhas de alocação de CLR.
  • Erros de conectividade usando connectivity_ring_buffer_recorded.
  • Erros de segurança usando security_error_ring_buffer_recorded.

Observação

Para obter mais informações sobre deadlocks, confira o guia Deadlocks. Para obter mais informações sobre mensagens de erro do SQL, consulte Eventos e erros do Mecanismo de Banco de Dados.

Exibir os dados da sessão system_health

A sessão usa tanto o destino do buffer de anel quanto o destino de arquivo de evento para armazenar os dados. O destino de arquivo de evento é configurado com um tamanho máximo de 5 MB e uma política de retenção de arquivo de quatro arquivos.

Para exibir os dados da sessão do destino de buffer de anel com a interface do usuário Eventos Estendidos disponível no SQL Server Management Studio, confira Exibição avançada de dados de destino de eventoseEstendidos no SQL Server - observar dados dinâmicos.

Para exibir os dados da sessão do destino de buffer de anel com o Transact-SQL, use a seguinte consulta:

SELECT CAST(xet.target_data as xml) AS target_data
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe
ON xe.address = xet.event_session_address
WHERE xe.name = 'system_health'

Para exibir os dados da sessão a partir do arquivo de eventos, use a interface do usuário do visualizador de eventos de Eventos Estendidos, disponível no SQL Server Management Studio. Para obter mais informações, consulte Exibir dados de eventos no SQL Server Management Studio.

Restaurar a sessão de system_health

Se você excluir a sessão system_health, poderá restaurá-la executando o script u_tables.sql. Esse arquivo está localizado na seguinte pasta, em que C: representa a unidade em que você instalou os arquivos de programa do SQL Server e MSSQLnn é a versão principal do SQL Server:

C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install

Depois de restaurar a sessão, você deverá iniciá-la usando a instrução ALTER EVENT SESSION ou usando o nó Eventos Estendidos no Pesquisador de Objetos. Caso contrário, a sessão será iniciada automaticamente na próxima vez que você reiniciar o serviço SQL Server.

A sessão de system_health no SQL do Azure

Na Instância Gerenciada de SQL do Azure, os dados da sessão system_health podem ser visualizados clicando com o botão direito do mouse no destino event_file ou ring_buffer no Pesquisador de Objetos e selecionando Exibir Dados de Destino.

Não há uma sessão integrada de Eventos Estendidos system_health no Banco de Dados SQL do Azure, mas você pode usar a função sys.fn_xe_file_target_read_file() para ler as sessões de Eventos Estendidos que você mesmo criar e armazenar no Armazenamento do Azure. Para obter um passo a passo, consulte Código de destino do arquivo de evento para eventos estendidos no Banco de Dados SQL do Azure.