Zugreifen auf Diagnoseinformationen im Protokoll der erweiterten Ereignisse

JDBC-Treiber herunterladen

In Microsoft JDBC-Treiber 4.0 für SQL Server erleichtert die Ablaufverfolgung (Ablaufverfolgung für Treibervorgänge) das Korrelieren von Clientereignissen mit Diagnoseinformationen. Elemente wie Verbindungsfehler aus dem Ringpuffer für Verbindungen des Servers und Informationen zur Anwendungsleistung im Protokoll für erweiterte Ereignisse können zurückverfolgt werden. Informationen dazu, wie Sie das Protokoll für erweiterte Ereignisse lesen, finden Sie unter Übersicht über erweiterte Ereignisse.

Details

Bei Verbindungsvorgängen sendet Microsoft JDBC-Treiber für SQL Server eine Clientverbindungs-ID. Wenn keine Verbindung hergestellt werden kann, können Sie auf den Konnektivitätsringpuffer zugreifen, das Feld ClientConnectionID suchen und Diagnoseinformationen zum Verbindungsfehler abrufen. Weitere Informationen zum Ringpuffer finden Sie unter Beheben von Konnektivitätsproblemen in SQL Server 2008 mit dem Konnektivitätsringpuffer. Clientverbindungs-IDs werden nur im Ringpuffer protokolliert, wenn ein Fehler auftritt. Wenn vor dem Senden des prelogin-Pakets keine Verbindung hergestellt werden kann, wird keine Clientverbindungs-ID generiert.

Die Clientverbindungs-ID ist eine 16-Byte-GUID. Wenn die Aktion client_connection_id zu Ereignissen in einer Sitzung für erweiterte Ereignisse hinzugefügt wird, ist die Clientverbindungs-ID in der Zielausgabe der erweiterten Ereignisse enthalten. Für zusätzliche Clienttreiberdiagnosen können Sie das Tracing aktivieren und den Verbindungsbefehl erneut ausführen, um das Feld ClientConnectionID im Trace zu sehen.

Sie können die Clientverbindungs-ID programmgesteuert abrufen, und zwar mit der ISQLServerConnection-Schnittstelle. Die Verbindungs-ID ist auch in verbindungsbezogenen Ausnahmen enthalten.

Bei einem Verbindungsfehler kann die Clientverbindungs-ID in den BID-Ablaufverfolgungsinformationen (integrierte Diagnose) des Servers und im Konnektivitätsringpuffer nützlich sein, um die Clientverbindungen mit Verbindungen auf dem Server zu korrelieren. Weitere Informationen zur BID-Ablaufverfolgung auf dem Server finden Sie unter Data Access Tracing (Datenzugriffsablaufverfolgung). Beachten Sie, dass der Artikel zur Datenzugriffsablaufverfolgung auch Informationen zur Datenzugriffsablaufverfolgung enthält, die nicht für den Microsoft JDBC-Treiber für SQL Server gelten. Informationen zum Durchführen einer Datenzugriffsablaufverfolgung mit dem Microsoft JDBC-Treiber für SQL Server finden Sie unter Ablaufverfolgung für Treibervorgänge.

Der JDBC-Treiber sendet außerdem eine threadspezifische Aktivitäts-ID. Die Aktivitäts-ID wird in den Sitzungen für erweiterte Ereignisse aufgezeichnet, wenn die Sitzungen bei aktivierter TRACK_CAUSALITY-Option gestartet werden. Bei Leistungsproblemen mit einer aktiven Verbindung können Sie die Aktivitäts-ID aus der Ablaufverfolgung des Clients (Feld ActivityID) abrufen und dann in der Ausgabe der erweiterten Ereignisse nach der Aktivitäts-ID suchen.

Die Aktivitäts-ID in erweiterten Ereignissen ist eine 16-Byte-GUID (entspricht nicht der GUID für die Clientverbindungs-ID), an die eine 4-Byte-Sequenznummer angehängt ist. Die Sequenznummer stellt die Reihenfolge einer Anforderung in einem Thread dar. Die ActivityId wird bei SQL-Stapelanweisungen und RPC-Anforderungen gesendet. Zum Aktivieren des Sendens der ActivityId an den Server müssen Sie das folgende Schlüssel-Wert-Paar in der Datei „Logging.Properties“ angeben:

com.microsoft.sqlserver.jdbc.traceactivity = on

Jeder andere Wert als on (unter Beachtung der Groß-/Kleinschreibung) deaktiviert das Senden der ActivityId.

Weitere Informationen finden Sie unter Ablaufverfolgung für Treibervorgänge. Dieses Traceflag wird zusammen mit den zugehörigen JDBC-Objektloggern verwendet, um zu bestimmen, ob die ActivityId im JDBC-Treiber nachverfolgt und gesendet werden soll. Aktivieren Sie zusätzlich zum Aktualisieren der Datei „Logging.Properties“ den Logger „com.microsoft.sqlserver.jdbc“ auf FINER oder höher. Wenn Sie die ActivityId bei Anfragen, die von einer bestimmten Klasse gestellt werden, an den Server senden möchten, aktivieren Sie den entsprechenden Klassen-Logger auf FINER oder FINEST. Wenn die Klasse beispielsweise SQLServerStatement lautet, aktivieren Sie die Protokollierung com.microsoft.sqlserver.jdbc.SQLServerStatement.

Im folgenden Beispiel wird Transact-SQL verwendet, um eine Extended-Events-Sitzung zu starten, die in einem Ringpuffer gespeichert wird und die Aktivitäts-ID aufzeichnet, die ein Client bei RPC- und Batchvorgängen sendet:

create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)