Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab Version 13.4 bietet der Microsoft JDBC-Treiber für SQL Server ein Framework für Leistungsmetriken zur Erfassung der zeitlichen Abläufe wichtiger Treibervorgänge. Sie können dieses Framework verwenden, um das Verhalten der Verbindungs- und Anweisungsausführung zu beobachten und zu analysieren, um Latenzengpässe in den Interaktionen Ihrer Anwendung mit SQL Server zu identifizieren.
Metriken sind über zwei Mechanismen verfügbar, die unabhängig oder gemeinsam verwendet werden können:
-
Programmgesteuerter Rückruf – Registrieren Sie ein
PerformanceLogCallback, um Metriken in Ihrem Anwendungscode zu erhalten. -
Java-Protokollierung – Abonnieren Sie dedizierte
java.util.loggingLogger, um Metriken in der Protokollausgabe zu erfassen.
Nachverfolgte Aktivitäten
Der Treiber verfolgt Aktivitäten auf zwei Ebenen: Verbindung und Abfrage.
Aktivitäten auf Verbindungsebene
| Aktivität | Beschreibung |
|---|---|
CONNECTION |
Gesamtzeit für das Herstellen einer Verbindung, einschließlich aller Subaktivitäten. |
PRELOGIN |
Zeitraum für die TDS-Login-Vorverhandlung mit dem Server. |
LOGIN |
Zeit für den TDS-Anmelde- und Authentifizierungs-Handshake. |
TOKEN_ACQUISITION |
Zeit zum Abrufen von Verbundauthentifizierungstoken bei Verwendung der Microsoft Entra-Authentifizierung. |
Aktivitäten auf Anweisungsebene
| Aktivität | Beschreibung |
|---|---|
STATEMENT_REQUEST_BUILD |
Clientseitige Zeit zum Erstellen der TDS-Anforderung (Parameterbindung, SQL-Verarbeitung, Paketkonstruktion). Nur Zeitmessung; Ausnahmen werden nicht nachverfolgt. |
STATEMENT_FIRST_SERVER_RESPONSE |
Zeit vom Senden der Anforderung an den Empfang der ersten Serverantwort. Nur Zeitdauer; Ausnahmen werden nicht nachverfolgt. |
STATEMENT_PREPARE |
Zeit für sp_prepare wenn prepareMethod=prepare. |
STATEMENT_PREPEXEC |
Zeit für die kombinierte Vorbereitung und Ausführung über sp_prepexec. |
STATEMENT_EXECUTE |
Zeit für die Ausführung von Anweisungen (sp_executesql, sp_execute, direktes SQL oder Batch). |
Aktivieren von Leistungsmetriken
Option 1: Registrieren eines Rückrufs
Registrieren Sie eine PerformanceLogCallback, um Leistungsdaten programmgesteuert zu erhalten.
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);
}
});
Option 2: Konfigurieren der Java-Protokollierung
Konfigurieren Sie java.util.logging für die Leistungsmetriken-Protokollierer auf der Ebene von FINE.
In einer logging.properties Datei:
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
Oder per Programmierung:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Einfluss der Methoden auf die Anweisungsaktivitäten vorbereiten
Die aktivitäten, die nachverfolgt werden PreparedStatement , hängen von der prepareMethod Verbindungseigenschaft ab. Weitere Informationen prepareMethodfinden Sie unter Festlegen der Verbindungseigenschaften.
prepareMethod-Einstellung |
Erste Ausführung | Zweite Ausführung | Dritte erweiterte Ausführung |
|---|---|---|---|
prepexec (Standardwert) |
STATEMENT_EXECUTE (sp_executesql) |
STATEMENT_PREPEXEC (sp_prepexec) |
STATEMENT_EXECUTE (sp_execute) |
prepare |
STATEMENT_PREPARE + STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
none |
STATEMENT_EXECUTE (direktes SQL) |
STATEMENT_EXECUTE (direktes SQL) |
STATEMENT_EXECUTE (direktes SQL) |
Hinweis
Mit der Standardeinstellung prepexec verzögert der Treiber die Vorbereitung unter der Annahme einer einzelnen Verwendung. Die zweite Ausführung verwendet sp_prepexec (kombinierte Vorbereitung und Ausführung). Ab der dritten Ausführung wird der zwischengespeicherte Handle über sp_execute verwendet. Um sp_prepexec beim ersten Aufruf zu erzwingen, legen Sie die Verbindungseigenschaft enablePrepareOnFirstPreparedStatementCall auf true fest.
Beispielprotokollausgabe
Die folgende Ausgabe zeigt die Aktivitäten, die in drei aufeinanderfolgenden Ausführungen einer PreparedStatement mit der Standardeinstellung prepexec nachverfolgt wurden:
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
Siehe auch
Verbesserung der Leistung und Zuverlässigkeit mit dem JDBC-TreiberFestlegen der Verbindungseigenschaften