Registrador de rendimiento y devolución de llamada

Descargar controlador JDBC

A partir de la versión 13.4, Microsoft JDBC Driver for SQL Server proporciona un marco de métricas de rendimiento para realizar un seguimiento del tiempo de las operaciones críticas del controlador. Puede usar este marco para observar y analizar el comportamiento de ejecución de conexiones y instrucciones, lo que ayuda a identificar cuellos de botella de latencia en las interacciones de la aplicación con SQL Server.

Las métricas están disponibles a través de dos mecanismos que se pueden usar de forma independiente o conjunta:

  • Callback programático: registra un PerformanceLogCallback para recibir métricas en el código de tu aplicación.
  • Registro en Java: suscríbete a java.util.logging registradores específicos para capturar métricas en la salida de registro.

Actividades con seguimiento

El controlador realiza un seguimiento de las actividades en dos niveles: conexión y instrucción.

Actividades de nivel de conexión

Actividad Descripción
CONNECTION Tiempo total para establecer una conexión, incluidas todas las subactividades.
PRELOGIN Tiempo de negociación previa al inicio de sesión de TDS con el servidor.
LOGIN Tiempo dedicado al proceso de inicio de sesión y autenticación de TDS.
TOKEN_ACQUISITION Tiempo dedicado a la obtención de tokens de autenticación federada al utilizar la autenticación de Microsoft Entra.

Actividades en el nivel de instrucción

Actividad Descripción
STATEMENT_REQUEST_BUILD Tiempo del lado cliente para compilar la solicitud TDS (enlace de parámetros, procesamiento de SQL, construcción de paquetes). Solo temporización; no registra las excepciones.
STATEMENT_FIRST_SERVER_RESPONSE Tiempo desde el envío de la solicitud para recibir la primera respuesta del servidor. Solo temporización; no registra las excepciones.
STATEMENT_PREPARE Hora de sp_prepare cuando prepareMethod=prepare.
STATEMENT_PREPEXEC Tiempo de preparación y ejecución combinados a través de sp_prepexec.
STATEMENT_EXECUTE Tiempo de ejecución de declaraciones (sp_executesql, sp_execute, SQL directo o lote).

Habilitación de métricas de rendimiento

Opción 1: Programar una llamada de retorno

Registre un PerformanceLogCallback para recibir datos de rendimiento mediante programación:

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

Opción 2: Configuración del registro de Java

Configurar java.util.logging para los registradores de métricas de rendimiento en el nivel FINE.

En un logging.properties archivo:

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

O mediante programación:

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

Preparar el efecto del método en las actividades de instrucción

Las actividades cuyo seguimiento se realiza para PreparedStatement dependen de la propiedad de conexión de prepareMethod. Para obtener más información sobre prepareMethod, vea Establecimiento de las propiedades de conexión.

Configuración de prepareMethod Primera ejecución Segunda ejecución Tercera ejecución y siguientes
prepexec (valor predeterminado) STATEMENT_EXECUTE (sp_executesql) STATEMENT_PREPEXEC (sp_prepexec) STATEMENT_EXECUTE (sp_execute)
prepare STATEMENT_PREPARE + STATEMENT_EXECUTE STATEMENT_EXECUTE STATEMENT_EXECUTE
none STATEMENT_EXECUTE (SQL directo) STATEMENT_EXECUTE (SQL directo) STATEMENT_EXECUTE (SQL directo)

Nota:

Con la configuración predeterminada prepexec , el controlador aplaza la preparación suponiendo un único uso. La segunda ejecución usa sp_prepexec (preparación y ejecución combinadas). A partir de la tercera ejecución en adelante, el identificador almacenado en caché se reutiliza a través de sp_execute. Para forzar sp_prepexec en la primera llamada, establezca la propiedad de conexión enablePrepareOnFirstPreparedStatementCall en true.

Salida de registro de ejemplo

La siguiente salida muestra las actividades registradas a lo largo de tres ejecuciones consecutivas de un PreparedStatement con la configuración predeterminada de 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