Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с версии 13.4 драйвер Microsoft JDBC для SQL Server предоставляет платформу метрик производительности для отслеживания времени критически важных операций драйверов. Эту платформу можно использовать для наблюдения за поведением подключения и выполнения инструкций, помогая выявлять узкие места задержки в взаимодействии приложения с SQL Server.
Метрики доступны с помощью двух механизмов, которые можно использовать независимо или совместно:
-
Программный обратный вызов: зарегистрируйте
PerformanceLogCallbackдля получения метрик в коде вашего приложения. -
Ведение журнала Java — подписывайтесь на специальные
java.util.loggingлоггеры, чтобы фиксировать метрики в журнале.
Отслеживаемые действия
Драйвер отслеживает действия на двух уровнях: подключение и инструкция.
Действия уровня подключения
| Activity | Описание |
|---|---|
CONNECTION |
Общее время для установления подключения, включая все подзадачи. |
PRELOGIN |
Время предварительного входа TDS с сервером. |
LOGIN |
Время выполнения рукопожатия для входа и аутентификации TDS. |
TOKEN_ACQUISITION |
Время, необходимое для получения федеративных токенов аутентификации при использовании Microsoft Entra. |
Действия на уровне инструкций
| Activity | Описание |
|---|---|
STATEMENT_REQUEST_BUILD |
Время на стороне клиента для создания запроса TDS (привязка параметров, обработка SQL, построение пакетов). Только синхронизация по времени; не выполняется отслеживание исключений. |
STATEMENT_FIRST_SERVER_RESPONSE |
Время от отправки запроса на получение первого ответа сервера. Только время; не отслеживает исключения. |
STATEMENT_PREPARE |
Время для sp_prepare, когда prepareMethod=prepare. |
STATEMENT_PREPEXEC |
Время для объединенной подготовки и выполнения с помощью sp_prepexec. |
STATEMENT_EXECUTE |
Время запуска инструкции (sp_executesql, sp_execute, прямой SQL или пакетный режим). |
Включение метрик производительности
Вариант 1. Регистрация обратного вызова
Зарегистрируйте PerformanceLogCallback, чтобы программно получать данные о производительности.
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);
}
});
Вариант 2. Настройка ведения журнала Java
Настройте java.util.logging средства ведения журнала метрик производительности на FINE уровне.
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
Или программно:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Метод подготовки и его влияние на активность операторов
Действия, отслеживаемые для PreparedStatement, зависят от prepareMethod свойства подключения. Дополнительные сведения см. в prepareMethodразделе "Настройка свойств подключения".
Настройка prepareMethod |
Первое выполнение | Второе выполнение | Третье+ выполнение |
|---|---|---|---|
prepexec (по умолчанию) |
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 (direct SQL) |
STATEMENT_EXECUTE (direct SQL) |
Замечание
Если задано значение по умолчанию prepexec , драйвер отложит подготовку при условии одноразового использования. Во втором выполнении используется sp_prepexec (совмещенная подготовка и выполнение). Начиная с третьего выполнения, кэшированный дескриптор повторно используется через sp_execute. Чтобы принудительно применить sp_prepexec при первом вызове, установите для свойства подключения enablePrepareOnFirstPreparedStatementCall значение true.
Пример выходных данных журнала
Следующие результаты PreparedStatement показывают действия, отслеживаемые в ходе трех последовательных запусков с настройкой по умолчанию 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
См. также
Повышение производительности и надежности с помощью драйвера JDBCНастройка свойств подключения