Rastreamento de dados no ADO.NET
O ADO.NET traz a funcionalidade interna de rastreamento de dados compatível com os provedores de dados do .NET para SQL Server, Oracle, OLE DB e ODBC, bem como 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 do ADO.NET ou entre o ADO.NET e os seus 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 somente do ADO.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, confira Rastreamento de acesso a dados.
Acessar informações de diagnóstico nos logs de eventos estendidos
No Provedor de Dados .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 às informações de diagnóstico, como falhas na conexão, do buffer de anéis de conectividade do servidor e informações de desempenho do aplicativo no log de eventos estendido. Para obter mais informações sobre como ler o log de eventos estendidos, consulte View Event Session Data.
Para operações de conexão, 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
.
A ClientConnectionID
está disponível para um objeto SqlConnection que estabelece com sucesso uma conexão. Se uma tentativa de conexão falhar, a ClientConnectionID
poderá estar disponível por meio de SqlException.ToString
.
O ADO.NET também envia uma ID de atividade específica de thread. A ID de atividade é capturada nas sessões de eventos estendidas se as sessões são iniciadas com a opção de 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. A ID de atividade nos eventos estendidos é um GUID de 16 bytes (não é o mesmo que o GUID da ID de conexão do cliente) com um número sequencial 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)