Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft.Data.SqlClient macht die Datenzugriffsablaufverfolgung über die Microsoft.Data.SqlClient.EventSource Ereignisquelle verfügbar. Andere ADO.NET-Komponenten, z. B. die .NET Framework-Anbieter für Oracle, OLE DB und ODBC und DataSet, haben ihre eigenen Ablaufverfolgungseinrichtungen.
Die Ablaufverfolgung von Aufrufen der Datenzugriffs-API kann bei der Diagnose der folgenden Probleme helfen:
Fehlende Schemaübereinstimmung zwischen Clientprogramm und Datenbank.
Nicht verfügbare Datenbank oder Probleme mit der Netzwerkbibliothek.
Fehlerhafte SQL-Anweisungen (sowohl hart codiert als auch von einer Anwendung generiert).
Fehlerhafte Programmierlogik.
Probleme, die sich aus der Interaktion zwischen mehreren ADO.NET Komponenten oder zwischen ADO.NET und Ihren eigenen Komponenten ergeben.
Zur Unterstützung verschiedener Ablaufverfolgungstechnologien ist die Ablaufverfolgung erweiterbar, sodass Entwickler eine Ablaufverfolgung für Probleme auf jeder Ebene des Anwendungsstapels ausführen können. Obwohl die Ablaufverfolgung kein ausschließliches ADO.NET-Feature ist, nutzen Microsoft-Anbieter die generalisierten Ablaufverfolgungs- und Instrumentierungs-APIs.
Weitere Informationen zum Sammeln von Microsoft. Data.SqlClient-Ablaufverfolgungen finden Sie unter Aktivieren der EventSource-Ablaufverfolgung in SqlClient.
Greifen Sie auf Diagnoseinformationen im erweiterten Ereignisprotokoll zu
Verwenden Sie Microsoft.Data.SqlClient-Verbindungs-IDs zum Korrelieren von Clientereignissen mit Serverdiagnoseinformationen wie Verbindungsfehlern im Verbindungsringpuffer und im erweiterten Ereignisprotokoll. Informationen zum Lesen des Protokolls für erweiterte Ereignisse finden Sie unter Ereignissitzungsdaten anzeigen.
Für Verbindungsvorgänge sendet Microsoft.Data.SqlClient während des Vorabprotokollaustauschs eine Clientverbindungs-ID. Wenn die Verbindung fehlschlägt, suchen Sie nach dem ClientConnectionID Feld im Verbindungsringpuffer, um Diagnoseinformationen zum Verbindungsausfall abzurufen. Clientverbindungs-IDs werden nur im Ringpuffer protokolliert, wenn ein Fehler auftritt. Wenn eine Verbindung vor dem Vorabaustausch fehlschlägt, empfängt der Server die ID nicht. Die Clientverbindungs-ID ist eine 16-Byte-GUID. Sie können auch die Clientverbindungs-ID in der Zielausgabe für erweiterte Ereignisse finden, wenn Sie die client_connection_id Aktion zu Ereignissen in einer erweiterten Ereignissitzung hinzufügen.
Um die Clientverbindungs-ID programmgesteuert abzurufen, verwenden Sie ClientConnectionId.
Die Verbindungs-ID ist für SqlConnection verfügbar, nachdem erfolgreich eine Verbindung hergestellt wurde. Wenn ein Verbindungsversuch fehlschlägt, könnte die ID über ClientConnectionId verfügbar sein.
Microsoft.Data.SqlClient sendet außerdem eine threadspezifische Aktivitäts-ID für Batchanweisungen und RPC-Anforderungen (Remote Procedure Call), wenn die Ereignisquelle aktiviert ist und der Server Ablaufverfolgungsheader unterstützt. Um die Aktivitäts-ID in einer erweiterten Ereignissitzung zu erfassen, aktivieren Sie TRACK_CAUSALITY. Suchen Sie bei Leistungsproblemen mit einer aktiven Verbindung die Aktivitäts-ID in der Clientablaufverfolgung und dann in der Ausgabe der erweiterten Ereignisse. Die Aktivitäts-ID enthält eine 16-Byte-GUID und eine Vier-Byte-Sequenznummer. Die Sequenznummer gibt die relative Reihenfolge von Anfragen innerhalb eines Threads an. Das Konfigurationswort für die Legacydatenzugriffsablaufverfolgung konfiguriert die Ereignisquelle von Microsoft.Data.SqlClient nicht.
Im folgenden Beispiel wird Transact-SQL verwendet, um eine Sitzung für erweiterte Ereignisse zu starten, die in einem Ringpuffer gespeichert wird und die Aktivitäts-ID aufzeichnen wird, die von einem Client in RPC- und Batch-Vorgängen gesendet wird.
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)