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

Baixar o JDBC Driver

No Microsoft JDBC Driver 4.0 para SQL Server, o rastreamento (rastreamento de operação do driver) facilita a correlação entre eventos do cliente e informações de diagnóstico. É possível rastrear itens como falhas de conexão do buffer de anéis de conectividade do servidor e informações de desempenho do aplicativo no log de eventos estendidos. Para obter mais informações sobre como ler o log de eventos estendidos, confira Eventos Estendidos.

Detalhes

Para operações de conexão, o Microsoft JDBC Driver para SQL Server enviará uma ID de conexão do cliente. Caso haja uma falha de conexão, será possível acessar o buffer de anéis de conectividade e localizar o campo ClientConnectionID para obter informações de diagnóstico sobre a falha. Para obter mais informações sobre o buffer de anéis, confira a Solução de problemas de conectividade no SQL Server 2008 usando o Buffer de Anéis de Conectividade. Os identificadores de conexão do cliente são registrados no buffer circular somente se ocorrer um erro. Caso haja uma falha de conexão antes do envio do pacote de pré-logon, uma ID de conexão do cliente não será gerada.

A ID de conexão de cliente é um GUID de 16 bytes. Caso uma ação client_connection_id seja adicionada aos eventos em uma sessão de eventos estendidos, a ID de conexão do cliente estará na saída de destino dos eventos estendidos. Para obter diagnósticos adicionais sobre o driver do cliente, será possível habilitar o rastreamento e executar o comando de conexão novamente para conferir o campo ClientConnectionID no rastreamento.

Você pode obter a ID de conexão do cliente programaticamente, usando a Interface ISQLServerConnection. A ID de conexão também estará presente em todas as exceções relacionadas à conexão.

Quando há um erro de conexão, a ID de conexão do cliente nas informações de rastreamento BID (Diagnóstico Interno) do servidor e no buffer de anéis de conectividade pode ajudar a correlacionar as conexões do cliente às conexões no servidor. Para obter mais informações sobre rastreamentos BID no servidor, confira Rastreamento de acesso a dados. Observe que o artigo sobre rastreamento de acesso a dados também traz informações sobre o rastreamento de acesso a dados que não se aplica ao Microsoft JDBC Driver para SQL Server; confira Rastreamento de operação do driver para obter informações sobre como fazer um rastreamento de acesso a dados usando o Microsoft JDBC Driver para SQL Server.

O JDBC Driver também envia uma ID de atividade específica do thread. Caso a sessão seja iniciada com a opção TRACK_CAUSALITY habilitada, a ID de atividade será capturada na sessão de eventos estendidos. Para problemas de desempenho com uma conexão ativa, você pode obter a ID de atividade do rastreamento do cliente (campo ActivityID) e localizar a ID de atividade na saída dos eventos estendidos.

O ID de atividade nos eventos estendidos é um GUID de 16 bytes (não o mesmo GUID do identificador de conexão do cliente), acrescido de um número de sequência de 4 bytes. O número sequencial representa a ordem de uma solicitação de um thread. O ActivityId é enviado para instruções SQL em lotes e solicitações RPC. Para habilitar o envio de ActivityId ao servidor, especifique o seguinte par chave-valor no arquivo Logging.Properties:

com.microsoft.sqlserver.jdbc.traceactivity = on

Qualquer valor diferente de on (diferencia maiúsculas de minúsculas) desabilitará o envio da ActivityId.

Para obter mais informações, veja Rastreamento de operação do driver. Esse sinalizador de rastreamento é usado com os agentes de objeto do JDBC correspondentes para decidir se haverá ou não o rastreamento e envio de ActivityId no JDBC driver. Além de atualizar o arquivo Logging.Properties, habilite o logger com.microsoft.sqlserver.jdbc em FINER ou superior. Para enviar o ActivityId ao servidor para solicitações feitas por uma determinada classe, habilite o logger da classe correspondente no nível FINER ou FINEST. Por exemplo, se a classe SQLServerStatement habilita o agente com.microsoft.sqlserver.jdbc.SQLServerStatement.

O exemplo a seguir usa o Transact-SQL para iniciar uma sessão de eventos estendidos que é armazenada em um buffer circular e registra a ID de atividade enviada pelo 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)