Freigeben über


Leistungsprotokollierung und Rückruf

JDBC-Treiber herunterladen

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.logging Logger, 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