Udostępnij za pośrednictwem


Uzyskiwanie dostępu do informacji diagnostycznych klienta natywnego programu SQL Server w dzienniku zdarzeń rozszerzonych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Ważny

klienta natywnego programu SQL Server (SNAC) nie jest dostarczany z:

  • SQL Server 2022 (16.x) i nowsze wersje
  • SQL Server Management Studio 19 i nowsze wersje

Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.

W przypadku nowych projektów użyj jednego z następujących czynników:

W przypadku programu SQLNCLI, który jest dostarczany jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), zobacz ten wyjątek cyklu wsparcia .

Począwszy od programu SQL Server 2012 (11.x), funkcja SQL Server Native Client i śledzenie dostępu do danych (śledzenie dostępu do danych) zostały zaktualizowane, aby ułatwić uzyskiwanie informacji diagnostycznych o błędach połączeń z buforu pierścienia łączności i informacji o wydajności aplikacji z dziennika zdarzeń rozszerzonych.

Aby uzyskać informacje o odczytywaniu dziennika zdarzeń rozszerzonych, zobacz Wyświetl dane sesji zdarzeń.

Nuta

Ta funkcja jest przeznaczona tylko do rozwiązywania problemów i celów diagnostycznych i może nie być odpowiednia do celów inspekcji lub zabezpieczeń.

Uwagi

W przypadku operacji połączenia klient natywny programu SQL Server wyśle identyfikator połączenia klienta. Jeśli połączenie zakończy się niepowodzeniem, możesz uzyskać dostęp do buforu pierścienia łączności (rozwiązywanie problemów z łącznością w programie SQL Server 2008 za pomocą buforu pierścienia łączności) i znaleźć pole ClientConnectionID 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 obiekcie docelowym danych wyjściowych 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 ślad dostępu do danych dla operacji zakończonej niepowodzeniem, jeśli potrzebujesz dalszej pomocy diagnostycznej.

Jeśli używasz odBC w kliencie natywnym programu SQL Server i połączenie powiedzie się, możesz uzyskać identyfikator połączenia klienta przy użyciu atrybutu SQL_COPT_SS_CLIENT_CONNECTION_ID z SQLGetConnectAttr.

Klient natywny 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 pobrać identyfikator działania ze śledzenia dostępu do danych klienta (pole ActivityID), a następnie zlokalizować identyfikator działania w danych wyjściowych zdarzeń rozszerzonych. Identyfikator działania w zdarzeniach rozszerzonych to 16-bajtowy identyfikator GUID (nie taki sam jak identyfikator GUID dla identyfikatora połączenia klienta) dołączony z cztero bajtowym numerem sekwencji. Numer sekwencji reprezentuje kolejność żądania w wątku i wskazuje względną kolejność instrukcji wsadowych i RPC dla wątku. ActivityID jest opcjonalnie wysyłany dla instrukcji wsadowych SQL i żądań RPC, gdy śledzenie dostępu do danych jest włączone, a 18 bit w słowie konfiguracji śledzenia dostępu do danych jest włączony.

Poniżej znajduje się przykład, który używa Transact-SQL do uruchomienia sesji zdarzeń rozszerzonych, która będzie przechowywana w buforze pierścieniowym i będzie rejestrować identyfikator działania wysyłany z klienta w operacjach 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)  
  

Plik kontrolny

W programie SQL Server 2012 (11.x) zawartość pliku sterowania natywnego klienta programu SQL Server (ctrl.guid.snac11) to:

{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}  0x00000000  0   MSDADIAG.ETW  
{2DA81B52-908E-7DB6-EF81-76856BB47C4F}  0xFFFFFFFF  0   SQLNCLI11.1  

Plik MOF

W programie SQL Server 2012 (11.x) zawartość pliku mof klienta natywnego programu SQL Server to:

#pragma classflags("forceupdate")  
#pragma namespace ("\\\\.\\Root\\WMI")  
  
/////////////////////////////////////////////////////////////////////////////  
//  
//  MSDADIAG.ETW  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW"),  
 Guid("{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW : EventTrace  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW"),  
 Guid("{8B98D3F3-3CC6-0B9C-6651-9649CCE5C752}"),  
 DisplayName("msdadiag"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace : Bid2Etw_MSDADIAG_ETW  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW formatted output (A)"),  
 EventType(17),  
 EventTypeName("TextA"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace_TextA : Bid2Etw_MSDADIAG_ETW_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringA"),  
     extension("RString"),  
     read  
    ]  
    object msgStr;  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW formatted output (W)"),  
 EventType(18),  
 EventTypeName("TextW"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace_TextW : Bid2Etw_MSDADIAG_ETW_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringW"),  
     extension("RWString"),  
     read  
    ]  
    object msgStr;  
};  
  
/////////////////////////////////////////////////////////////////////////////  
//  
//  SQLNCLI11.1  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1"),  
 Guid("{2DA81B52-908E-7DB6-EF81-76856BB47C4F}"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1 : EventTrace  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1"),  
 Guid("{2DA81B53-908E-7DB6-EF81-76856BB47C4F}"),  
 DisplayName("SQLNCLI11.1"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace : Bid2Etw_SQLNCLI11_1  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1 formatted output (A)"),  
 EventType(17),  
 EventTypeName("TextA"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace_TextA : Bid2Etw_SQLNCLI11_1_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringA"),  
     extension("RString"),  
     read  
    ]  
    object msgStr;  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1 formatted output (W)"),  
 EventType(18),  
 EventTypeName("TextW"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace_TextW : Bid2Etw_SQLNCLI11_1_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringW"),  
     extension("RWString"),  
     read  
    ]  
    object msgStr;  
};  

Zobacz też

obsługa błędów i komunikatów