Compartilhar via


Rastreamento de dados no ADO.NET

ADO.NET possui funcionalidade interna de rastreamento de dados, que é compatível com os provedores de dados do .NET para SQL Server, Oracle, OLE DB e ODBC, bem como com o ADO.NET DataSet e os protocolos de rede do SQL Server.

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 definir e configurar o rastreamento gerenciado em ADO.NET, consulte Rastreamento de Acesso a Dados.

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

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 de anel de conectividade do servidor e das informações de desempenho do aplicativo no log de eventos estendidos. Para obter mais informações sobre como ler o log de eventos estendidos, consulte View Event Session Data.

Para operações de conexão, ADO.NET enviará uma ID de conexão do cliente. Se houver falha na conexão, você poderá acessar o buffer de anéis de conectividade (Solução de problemas de conectividade no SQL Server 2008 com o buffer de anéis de conectividade), localizar o campo ClientConnectionID e obter informações de diagnóstico sobre a falha na conexão. As IDs de conexão de cliente estarão registradas no buffer de anéis se um erro ocorrer. (Se uma conexão falhar antes de enviar o pacote anterior ao logon, uma ID conexão de cliente não será gerada.) A ID de conexão de cliente é um GUID de 16 bytes. Você também poderá encontrar a ID de conexão do cliente na saída de destino dos eventos estendidos se a ação client_connection_id for adicionada aos eventos em uma sessão de eventos estendidos. Você pode habilitar o rastreamento de acesso a dados e executar novamente o comando de conexão, além de observar o campo ClientConnectionID no rastreamento de acesso a dados, caso precise obter assistência adicional com o diagnóstico de driver do cliente.

Você pode obter a ID de conexão do cliente de modo programático usando a propriedade SqlConnection.ClientConnectionID.

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

ADO.NET também envia uma ID de atividade específica do thread. A ID da atividade será capturada nas sessões de eventos estendidos se as sessões forem iniciadas com a opção TRACK_CAUSALITY habilitada. Para problemas de desempenho com uma conexão ativa, você poderá obter a ID de atividade do rastreamento de acesso a dados do cliente (campo ActivityID) e, em seguida, localizar a ID de atividade nas saídas dos eventos estendidos. O ID da atividade em eventos estendidos é um GUID de 16 bytes (não o mesmo que o GUID para o identificador de conexão do cliente) acrescido de 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 ordenação relativa de lote e as instruções RPC para o thread. No momento, a ActivityID é enviada opcionalmente para instruções em lote do SQL e solicitações do 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 (ON).

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