Udostępnij przez


Śledzenie danych w programie SqlClient

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Platforma .NET oferuje wbudowane funkcje śledzenia danych obsługiwane przez dostawcę danych Microsoft SqlClient dla protokołów sieciowych programu SQL Server i programu SQL Server.

Śledzenie wywołań interfejsu API dostępu do danych może pomóc zdiagnozować następujące problemy:

  • Niezgodność schematu między programem klienta a bazą danych.

  • Problemy z niedostępnością bazy danych lub biblioteką sieci.

  • Niepoprawny kod SQL niezależnie od tego, czy kodowany w sposób twardy, czy generowany przez aplikację.

  • Niepoprawna logika programowania.

  • Problemy wynikające z interakcji między dostawcą danych Microsoft SqlClient dla programu SQL Server i własnymi składnikami.

Aby obsługiwać różne technologie śledzenia, śledzenie jest rozszerzalne, więc deweloper może śledzić problem na dowolnym poziomie stosu aplikacji. Dostawca danych Microsoft SqlClient dla programu SQL Server korzysta z uogólnionych interfejsów API śledzenia i instrumentacji.

Aby uzyskać więcej informacji na temat ustawiania i konfigurowania śledzenia zarządzanego na platformie .NET, zobacz Śledzenie dostępu do danych.

Uzyskiwanie dostępu do informacji diagnostycznych w dzienniku zdarzeń rozszerzonych

W programie Microsoft SqlClient Data Provider for SQL Server śledzenie dostępu do danych ułatwia korelowanie zdarzeń klienta z informacjami diagnostycznymi, takimi jak błędy połączenia, z buforu pierścienia łączności serwera i informacji o wydajności aplikacji w dzienniku zdarzeń rozszerzonych. Aby uzyskać informacje na temat odczytywania dziennika zdarzeń rozszerzonych, zobacz Wyświetlanie danych sesji zdarzeń.

W przypadku operacji połączenia dostawca danych Microsoft SqlClient dla programu SQL Server wyśle identyfikator połączenia klienta. Jeśli połączenie nie powiedzie się, możesz uzyskać dostęp do buforu pierścienia łączności (rozwiązywanie problemów z łącznością w programie SQL Server 2008 z buforem pierścienia łączności) i znaleźć ClientConnectionID pole i uzyskać informacje diagnostyczne dotyczące błędu połączenia. Identyfikatory połączeń klienta są rejestrowane w buforze pierścienia tylko wtedy, gdy wystąpi błąd. Jeśli połączenie nie powiedzie się przed wysłaniem pakietu przedlogin, identyfikator połączenia klienta nie zostanie wygenerowany. Identyfikator połączenia klienta to 16-bajtowy identyfikator GUID. Identyfikator połączenia klienta można również znaleźć w danych wyjściowych celu zdarzeń rozszerzonych, jeśli akcja client_connection_id zostanie dodana do zdarzeń w sesji zdarzeń rozszerzonych. Możesz włączyć śledzenie dostępu do danych i ponownie uruchomić polecenie połączenia i obserwować ClientConnectionID pole w śladzie dostępu do danych, jeśli potrzebujesz dalszej pomocy diagnostycznej sterownika klienta.

Identyfikator połączenia klienta można uzyskać programowo przy użyciu SqlConnection.ClientConnectionID właściwości .

Uwaga / Notatka

Dostawca danych Microsoft SqlClient dla programu SQL Server obsługuje identyfikator sesji (SPID) od wersji 2.1.0. Można to uzyskać programistycznie, korzystając z właściwości SqlConnection.ServerProcessId.

Obiekty ClientConnectionID i ServerProcessId są dostępne dla SqlConnection obiektu, który pomyślnie ustanawia połączenie. Jeśli próba połączenia nie powiedzie się, ClientConnectionID może być dostępna za pośrednictwem SqlException.ToString.

Dostawca danych Microsoft SqlClient dla programu SQL Server wysyła również identyfikator działania specyficzny dla wątku. Identyfikator działania jest przechwytywany w sesjach zdarzeń rozszerzonych, jeśli sesje są uruchamiane z włączoną opcją TRACK_CAUSALITY. W przypadku problemów z wydajnością aktywnego połączenia można uzyskać identyfikator aktywności ze śledzenia dostępu do danych klienta (w polu ActivityID), a następnie zlokalizować ten identyfikator w wynikach zdarzeń rozszerzonych. Identyfikator aktywności w zdarzeniach rozszerzonych to 16-bajtowy identyfikator GUID (nie taki sam jak identyfikator GUID dla identyfikatora połączenia klienta) dołączany z numerem sekwencyjnym długości 4 bajtów. Numer sekwencji reprezentuje kolejność żądania w wątku i wskazuje względną kolejność instrukcji wsadowych i RPC dla wątku. Element ActivityID jest obecnie opcjonalnie wysyłany dla instrukcji wsadowych SQL i żądań RPC, kiedy włączone jest śledzenie dostępu do danych oraz gdy 18-ty bit w słowie konfiguracji śledzenia dostępu do danych jest włączony.

Poniższa instrukcja SQL to przykład korzystający z Transact-SQL do rozpoczęcia sesji zdarzeń rozszerzonych, która zostanie przechowana w buforze pierścieniowym i będzie rejestrować identyfikator aktywności wysyłany z klienta podczas operacji RPC i wsadowych.

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)

Zobacz także