Partilhar via


Rastreamento de dados em SqlClient

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

O .NET apresenta funcionalidade integrada de rastreamento de dados, suportada pelo Microsoft SqlClient Data Provider for SQL Server e protocolos de rede SQL Server.

Rastrear chamadas de acesso a dados à API pode ajudar a diagnosticar os seguintes problemas:

  • Incompatibilidade de esquema entre o programa cliente e a base de dados.

  • Indisponibilidade da base de dados ou problemas com bibliotecas de rede.

  • SQL incorreto, seja codificado fixamente ou gerado por uma aplicação.

  • Lógica de programação incorreta.

  • Problemas resultantes da interação entre o Microsoft SqlClient Data Provider para SQL Server e os seus próprios componentes.

Para suportar diferentes tecnologias de traço, o rastreio é extensível, permitindo que um programador rastreie um problema em qualquer nível da pilha de aplicações. O Microsoft SqlClient Data Provider para SQL Server aproveita APIs generalizadas de rastreamento e instrumentação.

Para mais informações sobre como definir e configurar o rastreio gerido em .NET, consulte Rastreio de Acesso a Dados.

Acesso à informação de diagnóstico no registo de eventos alargado

No Microsoft SqlClient Data Provider for SQL Server, o Data Access Tracing facilita a correlação entre eventos do cliente e informações de diagnóstico, como falhas de ligação, provenientes do anel de conectividade do servidor e da informação de desempenho da aplicação no registo de eventos alargado. Para informações sobre a leitura do registo de eventos alargado, consulte Ver Dados da Sessão de Eventos.

Para operações de ligação, o Microsoft SqlClient Data Provider para SQL Server enviará um ID de ligação do cliente. Se a ligação falhar, pode aceder ao buffer do anel de conectividade (resolução de problemas de conectividade no SQL Server 2008 com o Connectivity Ring Buffer) e encontrar o ClientConnectionID campo e obter informação de diagnóstico sobre a falha da ligação. Os IDs de conexão do cliente são registrados no buffer de anel somente se ocorrer um erro. Se uma ligação falhar antes de enviar o pacote de pré-login, não será gerado um ID de ligação do cliente. O ID de ligação do cliente é um GUID de 16 bytes. Também pode encontrar o ID da ligação do cliente na saída de destino dos eventos estendidos, se a ação client_connection_id for adicionada a uma sessão de eventos estendidos. Pode ativar o rastreio de acesso a dados, executar novamente o comando de ligação e observar o campo ClientConnectionID no rastreio de acesso aos dados, caso necessite de assistência adicional no diagnóstico do driver do cliente.

Podes obter o ID da ligação do cliente de forma programática usando a SqlConnection.ClientConnectionID propriedade.

Observação

O Microsoft SqlClient Data Provider para SQL Server suporta o ID de sessão (SPID) desde a versão 2.1.0. Podes obtê-lo programaticamente usando a propriedade SqlConnection.ServerProcessId .

Os ClientConnectionID e ServerProcessId estão disponíveis para um SqlConnection objeto que estabelece com sucesso uma ligação. Se uma tentativa de ligação falhar, ClientConnectionID pode estar disponível via SqlException.ToString.

O Microsoft SqlClient Data Provider para SQL Server também envia um ID de atividade específico para thread. O ID de atividade é capturado nas sessões de eventos estendidos se as sessões forem iniciadas com a opção TRACK_CAUSALITY ativada. Para problemas de desempenho com uma ligação ativa, pode obter o ID de atividade do rastreio de acesso aos dados do cliente (ActivityID campo) e depois localizar o ID de atividade na saída de eventos estendidos. O ID de atividade em eventos estendidos é um GUID de 16 bytes (diferente do GUID para o ID de ligação do cliente), acrescentado com um número sequencial de 4 bytes. O número de sequência representa a ordem de uma solicitação dentro de um thread e indica a ordem relativa das instruções batch e RPC para o thread. Atualmente, ActivityID pode ser enviado opcionalmente para instruções batch SQL e pedidos RPC quando a monitorização de acesso a dados está ativada e o 18.º bit na palavra de configuração da monitorização de acesso a dados está ligado.

A seguinte instrução SQL é um exemplo que usa Transact-SQL para iniciar uma sessão de eventos avançados que será armazenada num buffer circular e que irá registar o ID de atividade enviado por um cliente em operações RPC e em lote.

create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)

Consulte também