Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
JDBC-illesztőprogram letöltése
A 13.4-es verziótól kezdve az SQL Serverhez készült Microsoft JDBC-illesztőprogram teljesítménymetrika-keretrendszert biztosít a kritikus illesztőprogram-műveletek időzítésének nyomon követéséhez. Ezzel a keretrendszerrel megfigyelheti és elemezheti a kapcsolat- és utasításvégrehajtási viselkedést, így azonosíthatja az alkalmazás SQL Serverrel való interakcióinak késési szűk keresztmetszeteit.
A metrikák két, egymástól függetlenül vagy együtt használható mechanizmussal érhetők el:
-
Programozott visszahívás – Regisztráljon
PerformanceLogCallback-t, hogy metrikákat fogadjon az alkalmazáskódban. -
Java-naplózás – Előfizetés dedikált
java.util.loggingnaplózókra a metrikák naplózásához a naplókimenetben.
Nyomon követett tevékenységek
A vezérlőprogram két szinten követi nyomon a tevékenységeket: kapcsolat és utasítás szinten.
Kapcsolatszintű tevékenységek
| Activity | Leírás |
|---|---|
CONNECTION |
A kapcsolat létrehozásához szükséges teljes idő, beleértve az összes altevékenységet is. |
PRELOGIN |
A TDS bejelentkezés előtti egyeztetés ideje a kiszolgálóval. |
LOGIN |
A TDS bejelentkezési és hitelesítési kézfogásának ideje. |
TOKEN_ACQUISITION |
Ideje összevont hitelesítési jogkivonatokat beszerezni a Microsoft Entra-hitelesítés használatakor. |
Nyilatkozati szintű tevékenységek
| Activity | Leírás |
|---|---|
STATEMENT_REQUEST_BUILD |
Ügyféloldali idő a TDS-kérés létrehozásához (paraméterkötés, SQL-feldolgozás, csomagépítés). Csak időzítés; nem követi nyomon a kivételeket. |
STATEMENT_FIRST_SERVER_RESPONSE |
A kérés elküldésének ideje az első kiszolgálói válasz fogadásához. Csak időzítés; nem követi nyomon a kivételeket. |
STATEMENT_PREPARE |
A következő időpontra sp_preparevonatkozó prepareMethod=prepare idő: . |
STATEMENT_PREPEXEC |
A kombinált előkészítés és végrehajtás ideje sp_prepexec-on keresztül. |
STATEMENT_EXECUTE |
Az utasítás végrehajtásának ideje (sp_executesql, sp_execute, közvetlen SQL, vagy köteg). |
Teljesítménymetrikák engedélyezése
1. lehetőség: Visszahívás regisztrálása
Regisztráljon egy PerformanceLogCallback-t, hogy programozott módon fogadja a teljesítményadatokat:
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);
}
});
Nanomásodperces időzítés és utasításkörnyezet használata
A 13.6-os verziótól kezdve egy visszahívás a useNanoseconds() felülírásával engedélyezheti a nanoszekundumos időzítést. A visszahívás a getCurrentUserSql() és a getCurrentStatementType() elemet is meghívhatja, hogy egy utasításszintű eseményt összekapcsoljon az alkalmazás által elküldött SQL-szöveggel és a végrehajtott utasítás típusával.
getCurrentStatementType() visszaadja STATEMENT, PREPARED_STATEMENT, vagy CALLABLE_STATEMENT. A(z) getCurrentApplicationName() használatával azonosíthatja azt a kapcsolatot vagy készletet, amely egy eseményt előállított, a applicationName kapcsolattulajdonsága alapján. Ha applicationName nincs beállítva, a metódus visszaadja az illesztőprogram alapértelmezett alkalmazásnevét.
SQLServerDriver.registerPerformanceLogCallback(new PerformanceLogCallback() {
@Override
public boolean useNanoseconds() {
return true;
}
@Override
public void publish(PerformanceActivity activity, int connectionId,
long durationNs, Exception exception) {
// Connection-level metrics don't have SQL statement context.
System.out.printf("Application: %s, Activity: %s, Connection: %d, Duration: %d ns%n",
getCurrentApplicationName(), activity, connectionId, durationNs);
}
@Override
public void publish(PerformanceActivity activity, int connectionId,
int statementId, long durationNs, Exception exception) {
String applicationName = getCurrentApplicationName();
String userSql = getCurrentUserSql();
StatementType statementType = getCurrentStatementType();
System.out.printf("Application: %s, Type: %s, Activity: %s, SQL: %s, Duration: %d ns%n",
applicationName, statementType, activity, userSql, durationNs);
}
});
Nanomásodperces időzítés önkéntes. Azok a visszahívások, amelyek nem írják felül a useNanoseconds() elemet, továbbra is ezredmásodpercben megadott időtartamokat kapnak. Ha egy regisztrált visszahívás ezt kéri, a dedikált teljesítménynaplózó kimenete nanoszekundumot is használ, és az időtartamokat ns címkével jelöli; egyébként milliszekundumot és ms címkét használ. A hívások System.nanoTime() nagyobb terheléssel járhatnak, mint System.currentTimeMillis() bizonyos platformokon.
A visszahívás kontextus csak a megfelelő publish() invocation során érhető el.
getCurrentApplicationName() kapcsolatszintű és utasításszintű eseményekhez érhető el, és null kívül publish() értéket ad vissza. Akkor is visszaadhatja a(z) null értéket, ha a kapcsolat tulajdonságait még nem elemezték fel, például amikor a kapcsolódás meghiúsul, mielőtt feloldanák az alkalmazás nevét. Az SQL-környezet metódusai null értéket adnak vissza kapcsolatszintű események, SQL-környezettel nem rendelkező utasítások altevékenységi metrikái, valamint a publish() kívülről indított hívások esetén.
Figyelmeztetés
Az SQL szöveg tartalmazhat érzékeny adatokat literálisokban vagy kommentekben. Tisztítsd meg azt, és alkalmazd a szervezeted adatkezelési követelményeit, mielőtt naplókba vagy telemetriába írnád.
2. lehetőség: Java-naplózás konfigurálása
Konfigurálja java.util.logging a teljesítménymetrika-naplózókat a FINE szinten.
Egy logging.properties fájlban:
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
Vagy programozott módon:
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection")
.setLevel(Level.FINE);
Logger.getLogger("com.microsoft.sqlserver.jdbc.PerformanceMetrics.Statement")
.setLevel(Level.FINE);
Metódushatás előkészítése utasítási tevékenységekre
A nyomon követett PreparedStatement tevékenységek a prepareMethod kapcsolati tulajdonságtól függenek. További információ: prepareMethodA kapcsolat tulajdonságainak beállítása.
prepareMethod beállítás |
Első végrehajtás | Második végrehajtás | Harmadik+ végrehajtás |
|---|---|---|---|
prepexec (alapértelmezett) |
STATEMENT_EXECUTE (sp_executesql) |
STATEMENT_PREPEXEC (sp_prepexec) |
STATEMENT_EXECUTE (sp_execute) |
prepare |
STATEMENT_PREPARE + STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
STATEMENT_EXECUTE |
none |
STATEMENT_EXECUTE (közvetlen SQL) |
STATEMENT_EXECUTE (közvetlen SQL) |
STATEMENT_EXECUTE (közvetlen SQL) |
Megjegyzés:
Az alapértelmezett prepexec beállítással az illesztőprogram önálló használatot feltételezve defereli az előkészítést. A második végrehajtás (kombinált előkészítés és végrehajtás) használja sp_prepexec . A harmadik végrehajtástól kezdve a gyorsítótárazott fogópont a sp_execute segítségével újra felhasználható. Az első hívás kényszerítéséhez állítsa sp_prepexec a kapcsolati tulajdonságot enablePrepareOnFirstPreparedStatementCall a következőre: true.
Mintanapló kimenete
Az alábbi kimenet az alapértelmezett PreparedStatement beállítással három egymást követő végrehajtás prepexec során nyomon követett tevékenységeket mutatja be:
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