Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire dalla versione 13.4, Microsoft JDBC Driver per SQL Server offre un framework delle metriche delle prestazioni per tenere traccia della tempistica delle operazioni critiche del driver. È possibile usare questo framework per osservare e analizzare il comportamento di esecuzione delle istruzioni e delle connessioni, consentendo di identificare i colli di bottiglia della latenza nelle interazioni dell'applicazione con SQL Server.
Le metriche sono disponibili tramite due meccanismi che possono essere usati in modo indipendente o insieme:
-
Callback programmatico: registrare un oggetto
PerformanceLogCallbackper ricevere le metriche nel codice dell'applicazione. -
Registrazione Java : sottoscrivere logger dedicati
java.util.loggingper acquisire le metriche nell'output del log.
Attività rilevate
Il driver tiene traccia delle attività a due livelli: connessione e dichiarazione.
Attività a livello di connessione
| Activity | Descrizione |
|---|---|
CONNECTION |
Tempo totale per stabilire una connessione, incluse tutte le attività secondarie. |
PRELOGIN |
Tempo necessario per la negoziazione pre-accesso TDS con il server. |
LOGIN |
È il momento di eseguire l'handshake per l'accesso e l'autenticazione TDS. |
TOKEN_ACQUISITION |
Tempo necessario per acquisire token di autenticazione federati quando si usa l'autenticazione Microsoft Entra. |
Operazioni a livello di dichiarazione
| Activity | Descrizione |
|---|---|
STATEMENT_REQUEST_BUILD |
Tempo sul lato client per compilare la richiesta TDS (associazione di parametri, elaborazione SQL, costruzione di pacchetti). Solo monitoraggio temporale; non tiene traccia delle eccezioni. |
STATEMENT_FIRST_SERVER_RESPONSE |
Tempo trascorso dall'invio della richiesta alla ricezione della prima risposta del server. Solo monitoraggio del tempo; non rileva le eccezioni. |
STATEMENT_PREPARE |
Tempo per sp_prepare quando prepareMethod=prepare. |
STATEMENT_PREPEXEC |
Tempo per la preparazione combinata ed esecuzione tramite sp_prepexec. |
STATEMENT_EXECUTE |
Tempo per l'esecuzione dell'istruzione (sp_executesql, sp_execute, SQL diretto o batch). |
Abilitare le metriche delle prestazioni
Opzione 1: Registrare un callback
Registrare un PerformanceLogCallback oggetto per ricevere i dati sulle prestazioni a livello di codice:
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);
}
});
Opzione 2: Configurare la registrazione Java
Configurare java.util.logging i logger delle metriche delle prestazioni a FINE livello.
In un logging.properties file:
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
Oppure a livello di codice:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Preparare l'effetto del metodo sulle attività delle dichiarazioni
Le attività tracciate per PreparedStatement dipendono dalla proprietà di connessione prepareMethod. Per altre informazioni su prepareMethod, vedere Impostazione delle proprietà di connessione.
impostazione prepareMethod |
Prima esecuzione | Seconda esecuzione | +Terza esecuzione |
|---|---|---|---|
prepexec (impostazione predefinita) |
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 diretto) |
STATEMENT_EXECUTE (SQL diretto) |
STATEMENT_EXECUTE (SQL diretto) |
Annotazioni
Con l'impostazione predefinita prepexec , il driver rinvia la preparazione presupponendo un singolo utilizzo. La seconda esecuzione usa sp_prepexec (preparazione combinata ed esecuzione). A partire dalla terza esecuzione, l'handle memorizzato nella cache viene riutilizzato tramite sp_execute. Per forzare sp_prepexec alla prima chiamata, impostare la proprietà di connessione enablePrepareOnFirstPreparedStatementCall su true.
Output del log di esempio
L'output seguente mostra le attività rilevate tra tre esecuzioni consecutive di un PreparedStatement oggetto con l'impostazione predefinita 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
Vedere anche
Miglioramento delle prestazioni e dell'affidabilità con il driver JDBCImpostazione delle proprietà di connessione