Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od wersji 13.4, sterownik JDBC firmy Microsoft dla programu SQL Server udostępnia metryki wydajności do śledzenia chronometrażu krytycznych operacji sterowników. Za pomocą tej ramy można obserwować i analizować zachowanie wykonywania połączeń i instrukcji, aby pomóc w identyfikacji wąskich gardeł opóźnienia w interakcjach aplikacji z SQL Server.
Metryki są dostępne za pośrednictwem dwóch mechanizmów, które mogą być używane niezależnie lub razem:
-
Programowe wywołanie zwrotne — zarejestruj element
PerformanceLogCallbackw celu odbierania metryk w kodzie aplikacji. -
Logowanie w Java — subskrybuj dedykowane
java.util.loggingloggery, aby przechwytywać metryki w danych wyjściowych dziennika.
Śledzone działania
Sterownik śledzi działania na dwóch poziomach: połączenie i zapytanie.
Działania na poziomie połączenia
| Activity | Opis |
|---|---|
CONNECTION |
Łączny czas nawiązywania połączenia, w tym wszystkie podaktywności. |
PRELOGIN |
Czas na wstępne negocjacje TDS z serwerem. |
LOGIN |
Czas na rozpoczęcie procedury logowania i uwierzytelniania TDS. |
TOKEN_ACQUISITION |
Czas na uzyskanie tokenów uwierzytelniania federacyjnego podczas korzystania z uwierzytelniania firmy Microsoft Entra. |
Działania na poziomie instrukcji
| Activity | Opis |
|---|---|
STATEMENT_REQUEST_BUILD |
Czas po stronie klienta w celu skompilowania żądania TDS (powiązania parametrów, przetwarzania SQL, konstruowania pakietów). Wyłącznie czasowy. Nie śledzi wyjątków. |
STATEMENT_FIRST_SERVER_RESPONSE |
Czas od wysłania żądania do otrzymania pierwszej odpowiedzi serwera. Śledzenie tylko czasu; nie rejestruje wyjątków. |
STATEMENT_PREPARE |
Czas na sp_prepare kiedy prepareMethod=prepare. |
STATEMENT_PREPEXEC |
Czas łącznego przygotowania i wykonania za pomocą polecenia sp_prepexec. |
STATEMENT_EXECUTE |
Czas wykonywania instrukcji (sp_executesql, sp_execute, direct SQL lub batch). |
Włączanie metryk wydajności
Opcja 1: Zarejestruj wywołanie zwrotne
Zarejestruj PerformanceLogCallback aby odbierać dane wydajności programowo:
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);
}
});
Opcja 2. Konfigurowanie rejestrowania języka Java
Skonfiguruj java.util.logging dla rejestratorów metryk wydajności na poziomie FINE.
W pliku logging.properties:
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
Lub programowo:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Przygotowywanie wpływu metody na działania instrukcji
Działania śledzone dla PreparedStatement zależą od właściwości połączenia prepareMethod. Aby uzyskać więcej informacji na temat prepareMethod, odwołaj się do Ustawianie właściwości połączenia.
prepareMethod ustawienie |
Pierwsze uruchomienie | Drugie uruchomienie | Wykonywanie trzecie i kolejne |
|---|---|---|---|
prepexec (ustawienie domyślne) |
STATEMENT_EXECUTE (sp_executesql) |
STATEMENT_PREPEXEC (sp_prepexec) |
STATEMENT_EXECUTE (sp_execute) |
prepare |
STATEMENT_PREPARE + STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
none |
STATEMENT_EXECUTE (bezpośredni język SQL) |
STATEMENT_EXECUTE (bezpośredni język SQL) |
STATEMENT_EXECUTE (bezpośredni język SQL) |
Uwaga / Notatka
Domyślne ustawienie prepexec powoduje, że sterownik odracza przygotowanie przy założeniu jednorazowego użycia. Drugie wykonanie używa sp_prepexec (przygotowanie i wykonanie w jednym). Od trzeciego wykonania dalej buforowany uchwyt jest ponownie wykorzystywany przez sp_execute. Aby wymusić sp_prepexec na pierwszym wywołaniu, ustaw właściwość połączenia enablePrepareOnFirstPreparedStatementCall na true.
Przykładowe dane wyjściowe dziennika
Następujące dane wyjściowe przedstawiają działania śledzone w trzech kolejnych wykonaniach elementu PreparedStatement z ustawieniem domyślnym 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
Zobacz także
Zwiększanie wydajności i niezawodności dzięki sterownikowi JDBCUstawianie właściwości połączenia