Protokolovací a zpětná volání výkonu

Stáhnout ovladač JDBC

Od verze 13.4 poskytuje ovladač Microsoft JDBC pro SQL Server architekturu metrik výkonu pro sledování načasování důležitých operací ovladačů. Pomocí této architektury můžete sledovat a analyzovat chování při provádění připojení a příkazů, což pomáhá identifikovat kritické body latence při interakcích vaší aplikace s SQL Serverem.

Metriky jsou dostupné prostřednictvím dvou mechanismů, které je možné používat nezávisle nebo společně:

  • Programové zpětné volání – Zaregistrujte PerformanceLogCallback, abyste přijímali metriky v kódu aplikace.
  • Protokolování v Javě – Přihlaste se k odběru vyhrazených java.util.logging protokolovacích protokolů, abyste zachytili metriky ve výstupu protokolu.

Sledované aktivity

Ovladač sleduje aktivity na dvou úrovních: připojení a dotaz.

Aktivity na úrovni připojení

Activity Description
CONNECTION Celkový čas vytvoření připojení, včetně všech dílčích aktivit.
PRELOGIN Doba vyjednávání preloginu TDS se serverem
LOGIN Čas pro přihlášení TDS a ověřování metodou handshake
TOKEN_ACQUISITION Doba získání federovaných ověřovacích tokenů při použití ověřování Microsoft Entra

Aktivity na úrovni příkazů

Activity Description
STATEMENT_REQUEST_BUILD Čas na straně klienta pro sestavení požadavku TDS (vazby parametrů, zpracování SQL, konstrukce paketů). Pouze časování; nesleduje výjimky.
STATEMENT_FIRST_SERVER_RESPONSE Čas od odeslání požadavku na přijetí první odpovědi serveru Pouze časování; nesleduje výjimky.
STATEMENT_PREPARE Čas pro sp_prepare, když prepareMethod=prepare.
STATEMENT_PREPEXEC Doba pro kombinovanou přípravu a provedení prostřednictvím sp_prepexec.
STATEMENT_EXECUTE Doba provádění SQL dotazů (sp_executesql, přímé SQL sp_execute nebo dávková úloha).

Povolení metrik výkonu

Možnost 1: Registrace zpětného volání

Zaregistrujte PerformanceLogCallback pro přijímání dat o výkonu programově:

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

Možnost 2: Konfigurace protokolování Java

Nakonfigurujte java.util.logging zapisovače metrik výkonu na úrovni FINE.

logging.properties V souboru:

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

Nebo programově:

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

Příprava účinku metody na aktivity příkazů

Sledované aktivity PreparedStatement závisí na vlastnosti připojení prepareMethod. Pro více informací o prepareMethod viz Nastavení vlastností připojení.

prepareMethod nastavení První spuštění Druhé spuštění Třetí+ spuštění
prepexec (výchozí) STATEMENT_EXECUTE (sp_executesql) STATEMENT_PREPEXEC (sp_prepexec) STATEMENT_EXECUTE (sp_execute)
prepare STATEMENT_PREPARE + STATEMENT_EXECUTE STATEMENT_EXECUTE STATEMENT_EXECUTE
none STATEMENT_EXECUTE (direct SQL) STATEMENT_EXECUTE (přímý SQL) STATEMENT_EXECUTE (direct SQL)

Poznámka:

Při výchozím prepexec nastavení ovladač odkládá přípravu za předpokladu jednorázového použití. Druhé provedení používá sp_prepexec (kombinovaná příprava a spuštění). Od třetího spuštění je mezipaměťový popisovač znovu použit prostřednictvím sp_execute. Chcete-li vynutit sp_prepexec při prvním volání, nastavte vlastnost připojení enablePrepareOnFirstPreparedStatementCall na hodnotu true.

Ukázkový výstup protokolu

Následující výstup ukazuje aktivity sledované během tří po sobě jdoucích spuštění PreparedStatement s výchozím nastavením 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

Viz také

Zvýšení výkonu a spolehlivosti pomocí ovladače JDBCNastavení vlastností připojení