Rastreamento de dados no ADO.NET

Microsoft.Data.SqlClient expõe o rastreamento de acesso a dados por meio da fonte de evento Microsoft.Data.SqlClient.EventSource. Outros componentes do ADO.NET, como os provedores do .NET Framework para Oracle, OLE DB e ODBC, e DataSet têm seus próprios recursos de rastreamento.

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

  • Incompatibilidade de esquema entre o programa cliente e o banco de dados.

  • Problemas de biblioteca de rede ou de indisponibilidade de banco de dados.

  • SQL incorreto, seja embutido em código ou gerado por um aplicativo.

  • Lógica de programação incorreta.

  • Problemas resultantes da interação entre vários componentes ADO.NET ou entre ADO.NET e seus próprios componentes.

Para dar suporte a diferentes tecnologias de rastreamento, o rastreamento é extensível. Portanto, um desenvolvedor pode rastrear um problema em qualquer nível da pilha de aplicativos. Embora o rastreamento não seja um recurso exclusivo do ADO.NET, os provedores da Microsoft aproveitam as APIs generalizadas de rastreamento e instrumentação.

Para obter mais informações sobre como coletar rastreamentos do Microsoft.Data.SqlClient, consulte Habilitar rastreamento EventSource no SqlClient.

Acessar informações de diagnóstico nos logs de eventos estendidos

Use IDs de conexão do Microsoft.Data.SqlClient para correlacionar eventos de cliente com informações de diagnóstico do servidor, como falhas de conexão, no buffer de anel de conectividade e no log de eventos estendidos. Para obter informações sobre como ler o log de eventos estendidos, consulte Exibir Dados da Sessão de Eventos.

Para operações de conexão, Microsoft.Data.SqlClient envia uma ID de conexão do cliente durante a troca de pré-logon. Se a conexão falhar, procure o ClientConnectionID campo no buffer do anel de conectividade para obter informações de diagnóstico sobre a falha de conexão. As IDs de conexão do cliente serão registradas no buffer circular somente se um erro ocorrer. Se uma conexão falhar antes da troca de pré-logon, o servidor não receberá a ID. A ID de conexão de cliente é um GUID de 16 bytes. Você também pode encontrar a ID de conexão do cliente na saída de destino de eventos estendidos se adicionar a client_connection_id ação a eventos em uma sessão de eventos estendidos.

Para obter a ID de conexão do cliente programaticamente, use ClientConnectionId.

A ID da conexão estará disponível para SqlConnection após estabelecer uma conexão com êxito. Se uma tentativa de conexão falhar, a ID poderá estar disponível por meio de ClientConnectionId.

Microsoft. Data.SqlClient também envia uma ID de atividade específica de thread para instruções em lote e solicitações de RPC (chamada de procedimento remoto) quando sua fonte de evento está habilitada e o servidor dá suporte a cabeçalhos de rastreamento. Para capturar a ID da atividade em uma sessão de eventos estendidos, habilite TRACK_CAUSALITY. Para problemas de desempenho com uma conexão ativa, localize a ID da atividade no rastreamento do cliente e, em seguida, na saída de eventos estendidos. A ID da atividade contém um GUID de 16 bytes e um número de sequência de quatro bytes. O número da sequência indica a ordem relativa das solicitações em um thread. A palavra de configuração de rastreamento de acesso a dados herdada não configura a origem de evento do Microsoft.Data.SqlClient.

Veja a seguir um exemplo que usa o Transact-SQL para iniciar uma sessão de eventos estendida que será armazenada em um buffer circular e registrará o ID de atividade enviado de um cliente em operações RPC e de 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