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.
A partir da versão 13.4, o Microsoft JDBC Driver for SQL Server fornece uma estrutura de métricas de desempenho para acompanhar o timing das operações críticas dos drivers. Pode usar esta estrutura para observar e analisar o comportamento de execução de ligação e de sentenças, ajudando a identificar gargalos de latência nas interações da sua aplicação com o SQL Server.
As métricas estão disponíveis através de dois mecanismos que podem ser usados independentemente ou em conjunto:
-
Chamada de retorno programática - Registe um
PerformanceLogCallbackpara receber métricas no seu código de aplicação. -
Registo Java - Subscreva loggers dedicados
java.util.loggingpara capturar métricas na saída do log.
Atividades monitorizadas
O condutor acompanha as atividades em dois níveis: ligação e declaração.
Atividades ao nível de ligação
| Activity | Descrição |
|---|---|
CONNECTION |
Tempo total para estabelecer uma ligação, incluindo todas as subatividades. |
PRELOGIN |
Hora da negociação pré-login do TDS com o servidor. |
LOGIN |
Está na hora do aperto de mão de login e autenticação do TDS. |
TOKEN_ACQUISITION |
Está na altura de adquirir tokens de autenticação federada utilizando a autenticação da Microsoft Entra. |
Atividades ao nível de instrução
| Activity | Descrição |
|---|---|
STATEMENT_REQUEST_BUILD |
Tempo do lado do cliente para construir o pedido TDS (ligação de parâmetros, processamento SQL, construção de pacotes). Apenas cronometragem, não regista exceções. |
STATEMENT_FIRST_SERVER_RESPONSE |
Tempo desde o envio do pedido até receber a primeira resposta do servidor. Apenas por tempo; Não regista exceções. |
STATEMENT_PREPARE |
Hora de sp_prepare quando prepareMethod=prepare. |
STATEMENT_PREPEXEC |
Tempo para a preparação e execução combinados via sp_prepexec. |
STATEMENT_EXECUTE |
Tempo para execução de instruções (sp_executesql, sp_execute, SQL direto ou batch). |
Ativar métricas de desempenho
Opção 1: Registar uma chamada de retorno
Registe a PerformanceLogCallback para receber dados de desempenho programaticamente:
SQLServerDriver.registerPerformanceLogCallback(new PerformanceLogCallback() {
@Override
public void publish(PerformanceActivity activity, int connectionId,
long durationMs, Exception exception) {
// Connection-level metrics
System.out.printf("Activity: %s, Connection: %d, Duration: %d ms%n",
activity, connectionId, durationMs);
}
@Override
public void publish(PerformanceActivity activity, int connectionId,
int statementId, long durationMs, Exception exception) {
// Statement-level metrics
System.out.printf("Activity: %s, Connection: %d, Statement: %d, Duration: %d ms%n",
activity, connectionId, statementId, durationMs);
}
});
Opção 2: Configurar o registo Java
Configura java.util.logging para os registos de métricas de desempenho no FINE nível.
Em um logging.properties ficheiro:
com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection.level = FINE
com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement.level = FINE
handlers = java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = FINE
Ou programaticamente:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Preparar o efeito do método sobre as atividades da declaração
As atividades monitorizadas PreparedStatement dependem da propriedade de ligação prepareMethod . Para mais informações sobre prepareMethod, veja Definir as propriedades de ligação.
Configuração prepareMethod |
Primeira execução | Segunda execução | Terceira execução Plus |
|---|---|---|---|
prepexec (padrão) |
STATEMENT_EXECUTE (sp_executesql) |
STATEMENT_PREPEXEC (sp_prepexec) |
STATEMENT_EXECUTE (sp_execute) |
prepare |
STATEMENT_PREPARE + STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
none |
STATEMENT_EXECUTE (SQL direto) |
STATEMENT_EXECUTE (SQL direto) |
STATEMENT_EXECUTE (SQL direto) |
Observação
Com a configuração padrão prepexec , o condutor adia a preparação assumindo uso único. A segunda execução utiliza sp_prepexec (preparar e executar combinado). A partir da terceira execução, o handle em cache é reutilizado via sp_execute. Para forçar sp_prepexec a primeira chamada, defina a propriedade enablePrepareOnFirstPreparedStatementCall de ligação para true.
Amostra de saída logarítmica
A saída seguinte mostra as atividades rastreadas ao longo de três execuções consecutivas de um PreparedStatement com a configuração padrão prepexec.
ConnectionID:1, StatementID:1 Request build time, duration: 8ms
ConnectionID:1, StatementID:1 First server response, duration: 17ms
ConnectionID:1, StatementID:1 Statement execute, duration: 75ms ← 1st call: sp_executesql
ConnectionID:1, StatementID:1 Request build time, duration: 9ms
ConnectionID:1, StatementID:1 First server response, duration: 0ms
ConnectionID:1, StatementID:1 Statement prepexec, duration: 0ms ← 2nd call: sp_prepexec
ConnectionID:1, StatementID:1 Request build time, duration: 0ms
ConnectionID:1, StatementID:1 First server response, duration: 0ms
ConnectionID:1, StatementID:1 Statement execute, duration: 0ms ← 3rd call: sp_execute
Consulte também
Melhorar o desempenho e a fiabilidade com o driver JDBCDefinir as propriedades da ligação