Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Microsoft.Data.SqlClient expõe o rastreio de acesso aos dados através da origem de eventos Microsoft.Data.SqlClient.EventSource. Outros componentes ADO.NET, como os providers do .NET Framework para Oracle, OLE DB e ODBC, e DataSet, têm as suas próprias funcionalidades de rastreamento.
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 uma funcionalidade exclusiva do ADO.NET, os fornecedores da Microsoft tiram partido das APIs generalizadas de rastreamento e instrumentação.
Para mais informações sobre como recolher rastreios do Microsoft.Data.SqlClient, consulte Ativar rastreio EventSource no SqlClient.
Aceder a informações de diagnóstico no registo de eventos expandido
Utilize os IDs de ligação do Microsoft.Data.SqlClient para correlacionar eventos do cliente com informações de diagnóstico do servidor, como falhas de ligação, no buffer circular de conectividade e no registo de eventos estendidos. Para informações sobre como ler o registo de eventos alargado, consulte Ver Dados da Sessão de Eventos.
Para operações de ligação, a Microsoft. Data.SqlClient envia um ID de ligação do cliente durante a troca de pré-login. Se a ligação falhar, procure o ClientConnectionID campo no buffer do anel de conectividade para 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 da troca de pré-login, o servidor não receberá o ID. O ID de ligação do cliente é um GUID de 16 bytes. Também pode encontrar o ID de ligação do cliente na saída de destino dos eventos estendidos se adicionar a ação client_connection_id aos eventos numa sessão de eventos estendidos.
Para obter o ID de ligação do cliente programaticamente, use ClientConnectionId.
O ID da ligação está disponível para SqlConnection depois de este estabelecer uma ligação com sucesso. Se uma tentativa de ligação falhar, o ID pode estar disponível através de ClientConnectionId.
Microsoft.Data.SqlClient também envia um ID de atividade específico da thread para instruções em lote e pedidos de chamada de procedimento remoto (RPC) quando a origem do evento está ativada e o servidor suporta cabeçalhos trace. Para capturar o ID da atividade numa sessão de eventos estendidos, ative TRACK_CAUSALITY. Para problemas de desempenho com uma ligação ativa, localize o ID de atividade no rastreio do cliente e depois na saída de eventos estendidos. O ID da atividade contém um GUID de 16 bytes e um número de sequência de quatro bytes. O número de sequência indica a ordem relativa dos pedidos dentro de um thread. A palavra de configuração herdada para o rastreio de acesso a dados não configura a fonte de eventos do Microsoft.Data.SqlClient.
A seguir está um exemplo que usa Transact-SQL para iniciar uma sessão de eventos estendida que será armazenada em um buffer de anel e registrará o ID de atividade enviado de um cliente em RPC e operações 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)