Pencatat performa dan panggilan balik

Unduh driver JDBC

Dimulai dengan versi 13.4, Driver Microsoft JDBC untuk SQL Server menyediakan kerangka kerja metrik performa untuk melacak waktu operasi driver penting. Anda dapat menggunakan kerangka kerja ini untuk mengamati dan menganalisis perilaku eksekusi koneksi dan pernyataan, membantu mengidentifikasi hambatan latensi dalam interaksi aplikasi Anda dengan SQL Server.

Metrik tersedia melalui dua mekanisme yang dapat digunakan secara independen atau bersama-sama:

  • Panggilan balik terprogram - Daftarkan PerformanceLogCallback untuk menerima metrik dalam kode aplikasi Anda.
  • Pengelogan Java - Berlangganan logger khusus java.util.logging untuk menangkap metrik dalam output log.

Aktivitas terpantau

Driver melacak aktivitas pada dua tingkat: koneksi dan pernyataan.

Aktivitas tingkat koneksi

Aktivitas Deskripsi
CONNECTION Total waktu untuk membuat koneksi, termasuk semua sub aktivitas.
PRELOGIN Waktu untuk negosiasi pralogin TDS dengan server.
LOGIN Waktu untuk login TDS dan jabat tangan autentikasi.
TOKEN_ACQUISITION Saatnya memperoleh token autentikasi gabungan saat menggunakan autentikasi Microsoft Entra.

Aktivitas tingkat pernyataan

Aktivitas Deskripsi
STATEMENT_REQUEST_BUILD Waktu sisi klien untuk membangun permintaan TDS (pengikatan parameter, pemrosesan SQL, konstruksi paket). Hanya waktu; tidak melacak pengecualian.
STATEMENT_FIRST_SERVER_RESPONSE Waktu dari mengirim permintaan untuk menerima respons server pertama. Hanya pengukuran waktu; tidak melacak pengecualian.
STATEMENT_PREPARE Waktu untuk sp_prepare saat prepareMethod=prepare.
STATEMENT_PREPEXEC Saatnya untuk persiapan dan pelaksanaan gabungan melalui sp_prepexec.
STATEMENT_EXECUTE Waktu untuk eksekusi perintah (sp_executesql, SQL langsung sp_execute, atau batch).

Mengaktifkan metrik performa

Opsi 1: Mendaftarkan panggilan balik

Daftarkan PerformanceLogCallback untuk menerima data performa melalui program:

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

Opsi 2: Mengonfigurasi pengelogan Java

Konfigurasikan java.util.logging untuk pencatat metrik performa pada FINE tingkat.

logging.properties dalam berkas

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

Atau secara terprogram:

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

Menyiapkan efek metode pada aktivitas pernyataan

Aktivitas yang dilacak untuk PreparedStatement bergantung pada properti koneksi prepareMethod. Untuk informasi selengkapnya tentang prepareMethod, lihat Mengatur properti koneksi.

prepareMethod Pengaturan Eksekusi pertama Eksekusi kedua Eksekusi ketiga+
prepexec (standar) 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 langsung) STATEMENT_EXECUTE (SQL langsung) STATEMENT_EXECUTE (SQL langsung)

Nota

Dengan pengaturan default prepexec, driver menangguhkan persiapan karena diasumsikan untuk digunakan sekali. Eksekusi kedua menggunakan sp_prepexec (persiapan dan eksekusi gabungan). Dari eksekusi ketiga dan seterusnya, pegangan cache digunakan kembali melalui sp_execute. Untuk memaksa sp_prepexec pada panggilan pertama, atur properti koneksi enablePrepareOnFirstPreparedStatementCall ke true.

Contoh output log

Output berikut menunjukkan aktivitas yang dipantau selama tiga eksekusi berturut-turut PreparedStatement dengan pengaturan default 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

Baca juga

Meningkatkan performa dan keandalan dengan driver JDBCMengatur properti koneksi