Partilhar via


Rastreamento de dados em ADO.NET

ADO.NET apresenta a funcionalidade interna de rastreamento de dados que é suportada pelos provedores de dados .NET para SQL Server, Oracle, OLE DB e ODBC, bem como os protocolos de rede ADO.NET DataSete SQL Server.

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

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

  • Indisponibilidade do banco de dados ou problemas na biblioteca de rede.

  • SQL incorreto, seja codificado 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 oferecer suporte a diferentes tecnologias de rastreamento, o rastreamento é extensível, para que um desenvolvedor possa rastrear um problema em qualquer nível da pilha de aplicativos. Embora o rastreamento não seja um ADO. Recurso somente NET, os provedores da Microsoft aproveitam as APIs de rastreamento e instrumentação generalizadas.

Para obter mais informações sobre como definir e configurar o rastreamento gerenciado no ADO.NET, consulte Rastreando o acesso a dados.

Acessando informações de diagnóstico no log de eventos estendido

No Provedor de Dados do .NET Framework para SQL Server, o rastreamento de acesso a dados (Rastreamento de Acesso a Dados) foi atualizado para facilitar a correlação de eventos do cliente com informações de diagnóstico, como falhas de conexão, do buffer do anel de conectividade do servidor e informações de desempenho do aplicativo no log de eventos estendido. Para obter informações sobre como ler o log de eventos estendido, consulte Exibir dados da sessão do evento.

Para operações de conexão, ADO.NET enviará um ID de conexão de cliente. Se a conexão falhar, você poderá acessar o buffer de anel de conectividade (Solução de problemas de conectividade no SQL Server 2008 com o buffer de anel de conectividade) e localizar o ClientConnectionID campo e obter informações de diagnóstico sobre a falha de conexão. Os IDs de conexão do cliente são registrados no buffer de anel somente se ocorrer um erro. (Se uma conexão falhar antes de enviar o pacote de pré-login, um ID de conexão do cliente não será gerado.) O ID de conexão do cliente é um GUID de 16 bytes. Você também pode encontrar o ID de conexão do cliente na saída de destino de eventos estendidos, se a ação for adicionada client_connection_id a eventos em uma sessão de eventos estendida. Você pode habilitar o rastreamento de acesso a dados e executar novamente o comando connection e observar o ClientConnectionID campo no rastreamento de acesso a dados, se precisar de mais assistência de diagnóstico de driver de cliente.

Você pode obter o ID de conexão do cliente programaticamente usando a SqlConnection.ClientConnectionID propriedade.

O ClientConnectionID está disponível para um SqlConnection objeto que estabelece com êxito uma conexão. Se uma tentativa de conexão falhar, ClientConnectionID pode estar disponível via SqlException.ToString.

ADO.NET também envia um ID de atividade específico do 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 conexão ativa, você pode obter o ID de atividade do rastreamento de acesso a dados do cliente (ActivityID campo) e, em seguida, localizar o ID de atividade na saída de eventos estendidos. O ID de atividade em eventos estendidos é um GUID de 16 bytes (não o mesmo que o GUID para o ID de conexão do cliente) anexado com um número de sequência de quatro 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, o ActivityID é enviado opcionalmente para instruções em lote SQL e solicitações RPC quando o rastreamento de acesso a dados está habilitado e o 18º bit na palavra de configuração de rastreamento de acesso a dados está ativado.

A seguir está um exemplo que usa o Transact-SQL para iniciar uma sessão de eventos estendida que será armazenada em um buffer de anel e registrará a ID de atividade enviada de 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