Delen via


Prestatielogger en callback

JDBC-stuurprogramma downloaden

Vanaf versie 13.4 biedt het Microsoft JDBC-stuurprogramma voor SQL Server een framework voor prestatiemetrieken voor het bijhouden van de timing van kritieke stuurprogrammabewerkingen. U kunt dit framework gebruiken om het gedrag van de uitvoering van verbindingen en instructies te observeren en te analyseren, om latentieknelpunten te identificeren in de interacties van uw toepassing met SQL Server.

Metrische gegevens zijn beschikbaar via twee mechanismen die onafhankelijk of samen kunnen worden gebruikt:

  • Programmatische callback : registreer een PerformanceLogCallback voor het ontvangen van metrische gegevens in uw toepassingscode.
  • Java-logboekregistratie : abonneer u op toegewezen java.util.logging logboekregistraties om metrische gegevens vast te leggen in logboekuitvoer.

Bijgehouden activiteiten

Het stuurprogramma houdt activiteiten bij op twee niveaus: verbinding en opdracht.

Activiteiten op verbindingsniveau

Activity Beschrijving
CONNECTION Totale tijd voor het tot stand brengen van een verbinding, inclusief alle subactiviteiten.
PRELOGIN Tijd voor TDS-preloginonderhandeling met de server.
LOGIN Tijd voor de TDS-aanmelding en verificatie begroetingsuitwisseling.
TOKEN_ACQUISITION Tijd om federatieve verificatietokens te verkrijgen bij het gebruik van Microsoft Entra-verificatie.

Activiteiten op statementniveau

Activity Beschrijving
STATEMENT_REQUEST_BUILD Tijd aan de clientzijde om de TDS-aanvraag te bouwen (parameterbinding, SQL-verwerking, pakketconstructie). Alleen tijdsinstellingen; houdt geen uitzonderingen bij.
STATEMENT_FIRST_SERVER_RESPONSE Tijd van het verzenden van de aanvraag naar het ontvangen van het eerste serverantwoord. Alleen tijdsinstellingen; houdt geen uitzonderingen bij.
STATEMENT_PREPARE Tijd voor sp_prepare wanneer prepareMethod=prepare.
STATEMENT_PREPEXEC Tijd voor gecombineerde voorbereiding en uitvoering via sp_prepexec.
STATEMENT_EXECUTE Tijd voor het uitvoeren van de instructie (sp_executesql, sp_execute, directe SQL, of batch).

Metrische prestatiegegevens inschakelen

Optie 1: Een callback registreren

Registreer een PerformanceLogCallback programma voor het ontvangen van prestatiegegevens:

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);
    }
});

Optie 2: Java-logboekregistratie configureren

Configureer java.util.logging voor de logboekregistraties voor metrische prestatiegegevens op FINE niveau.

In een logging.properties bestand:

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

Of doe het programmatisch:

Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
      .setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
      .setLevel(Level.FINE);

Methode-effect voorbereiden op instructieactiviteiten

De activiteiten die voor PreparedStatement worden bijgehouden, zijn afhankelijk van de prepareMethod verbindingseigenschappen. Zie prepareMethod voor meer informatie.

prepareMethod instelling Eerste uitvoering Tweede uitvoering Derde+ uitvoering
prepexec (standaard) STATEMENT_EXECUTE (sp_executesql) STATEMENT_PREPEXEC (sp_prepexec) STATEMENT_EXECUTE (sp_execute)
prepare STATEMENT_PREPARE + STATEMENT_EXECUTE STATEMENT_EXECUTE STATEMENT_EXECUTE
none STATEMENT_EXECUTE (directe SQL) STATEMENT_EXECUTE (directe toegang tot SQL) STATEMENT_EXECUTE (directe SQL)

Opmerking

Met de standaardinstelling prepexec stelt het stuurprogramma de voorbereiding uit, ervan uitgaande dat er slechts één keer gebruik gemaakt wordt. De tweede uitvoering maakt gebruik sp_prepexec van (gecombineerde voorbereiding en uitvoering). Vanaf de derde uitvoering wordt de in de cache opgeslagen ingang opnieuw gebruikt via sp_execute. Om sp_prepexec bij de eerste aanroep af te dwingen, stelt u de verbindingseigenschap enablePrepareOnFirstPreparedStatementCall in op true.

Voorbeeld van logboekuitvoer

In de volgende uitvoer ziet u de activiteiten die worden bijgehouden voor drie opeenvolgende uitvoeringen van een PreparedStatement met de standaardinstelling 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

Zie ook

Prestaties en betrouwbaarheid verbeteren met het JDBC-stuurprogrammaDe verbindingseigenschappen instellen