Aracılığıyla paylaş


Performans kaydedici ve geri çağırma işlevi

JDBC sürücüsünü indirin

13.4 sürümünden başlayarak SQL Server için Microsoft JDBC Sürücüsü, kritik sürücü işlemlerinin zamanlamasını izlemeye yönelik bir performans ölçümleri çerçevesi sağlar. Bağlantı ve deyim yürütme davranışını gözlemlemek ve analiz etmek için bu çerçeveyi kullanabilir ve uygulamanızın SQL Server ile etkileşimlerindeki gecikme sorunlarını belirlemenize yardımcı olabilirsiniz.

Ölçümler, bağımsız olarak veya birlikte kullanılabilecek iki mekanizmayla kullanılabilir:

  • Programlı geri çağırma - Uygulama kodunuzdaki ölçümleri almak için bir PerformanceLogCallback kaydedin.
  • Java günlüğü - Günlük çıkışındaki ölçümleri yakalamak için ayrılmış java.util.logging günlükçülere abone olun.

İzlenen etkinlikler

Sürücü, etkinlikleri iki düzeyde izler: bağlantı ve komut.

Bağlantı düzeyi etkinlikleri

Activity Açıklama
CONNECTION Tüm alt etkinlikler dahil olmak üzere bağlantı kurulması için toplam süre.
PRELOGIN Sunucuyla TDS ön oturum açma anlaşması zamanı.
LOGIN TDS oturum açma ve kimlik doğrulama el sıkışma zamanı.
TOKEN_ACQUISITION Microsoft Entra kimlik doğrulamasını kullanırken federe kimlik doğrulama belirteçlerini alma süresi.

İfade düzeyinde etkinlikler

Activity Açıklama
STATEMENT_REQUEST_BUILD TDS isteğini derlemek için istemci tarafı süresi (parametre bağlama, SQL işleme, paket oluşturma). Yalnızca zamanlama; özel durumları izlemez.
STATEMENT_FIRST_SERVER_RESPONSE İsteği göndermeden ilk sunucu yanıtını almaya kadar geçen süre. Yalnızca zamanlama; özel durumları izlemez.
STATEMENT_PREPARE sp_prepare zamanı prepareMethod=prepare olduğunda.
STATEMENT_PREPEXEC sp_prepexec aracılığıyla hazırlığı ve yürütmeyi birleştirme zamanı.
STATEMENT_EXECUTE Deyim yürütme süresi (sp_executesql, sp_execute, doğrudan SQL ya da toplu iş).

Performans ölçümlerini etkinleştirme

1. Seçenek: Geri çağırma kaydı

Program aracılığıyla performans verilerini almak için bir PerformanceLogCallback kaydedin:

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

Seçenek 2: Java günlüğünü yapılandırma

Performans metrik günlükçülerini java.util.logging düzeyinde FINE için yapılandırın.

Bir logging.properties dosyasında:

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

Veya program aracılığıyla:

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

Beyan ifadeleri üzerinde yöntemin etkisinin hazırlanması

PreparedStatement için izlenen etkinlikler, prepareMethod bağlantı özelliğine bağlıdır. hakkında prepareMethoddaha fazla bilgi için bkz . Bağlantı özelliklerini ayarlama.

prepareMethod ayar İlk çalıştırma İkinci çalıştırma Üçüncü işlem
prepexec (varsayılan) STATEMENT_EXECUTE (sp_executesql) STATEMENT_PREPEXEC (sp_prepexec) STATEMENT_EXECUTE (sp_execute)
prepare STATEMENT_PREPARE + STATEMENT_EXECUTE STATEMENT_EXECUTE STATEMENT_EXECUTE
none STATEMENT_EXECUTE (doğrudan SQL) STATEMENT_EXECUTE (doğrudan veri tabanı sorgulaması - SQL) STATEMENT_EXECUTE (doğrudan SQL)

Uyarı

Varsayılan prepexec ayar ile sürücü, tek kullanım varsayılarak hazırlığı önler. İkinci çalıştırma, sp_prepexec (birleştirilmiş hazırlama ve yürütme) kullanır. Üçüncü yürütmeden itibaren, sp_execute aracılığıyla önbelleğe alınan tanıtıcı yeniden kullanılır. İlk çağrıyı zorlamak sp_prepexec için bağlantı özelliğini enablePrepareOnFirstPreparedStatementCall olarak trueayarlayın.

Örnek günlük çıktısı

Aşağıdaki çıktıda, varsayılan PreparedStatement ayara sahip bir prepexec öğesinin ardışık üç yürütmesinde izlenen etkinlikler gösterilir:

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

Ayrıca bakınız

JDBC sürücüsüyle performansı ve güvenilirliği artırmaBağlantı özelliklerini ayarlama