Поделиться через


Доступ к диагностическим сведениям в журнале расширенных событий

Начиная с версии SQL Server 2012, Native Client SQL Server и отслеживание доступа к данным (Трассировка доступа к данным) обновлены. Упрощено получение диагностических сведений об ошибках подключения из кольцевого буфера соединений и сведений о производительности приложений из журнала расширенных событий.

Дополнительные сведения о чтении журнала расширенных событий см. в разделе Просмотр данных о сеансе событий.

ПримечаниеПримечание

Эта функция предназначена только для диагностики и устранения неполадок; она может оказаться неприменимой для целей аудита или обеспечения безопасности.

Замечания

Для операций подключения собственный клиент SQL Server будет отправлять идентификатор подключения клиента. Если подключение завершилось ошибкой, то можно в кольцевом буфере подключений (Устранение связанных с подключением неполадок в SQL Server 2008 с использованием кольцевого буфера подключений) найти поле ClientConnectionID и получить диагностические данные по ошибке подключения. Идентификаторы подключений клиентов регистрируются в кольцевом буфере только при возникновении ошибки. (Если подключение завершилось сбоем до отправки предварительного пакета входа, то идентификатор подключения клиента не формируется.) Идентификатор клиентского соединения — это 16-байтовый идентификатор GUID. Идентификатор подключения клиента также можно найти в расположении вывода расширенных событий, если действие client_connection_id добавляется к событиям в сеансе расширенных событий. Если необходима дополнительная помощь в диагностике, то можно включить отслеживание доступа к данным и повторно выполнить команду соединения, а затем отследить в поле ClientConnectionID в трассировке доступа к данным операцию, завершившуюся ошибкой.

Если ODBC используется в собственном клиенте SQL Server и подключение выполнено успешно, то идентификатор подключения клиента можно получить с помощью атрибута SQL_COPT_SS_CLIENT_CONNECTION_ID из SQLGetConnectAttr.

Собственный клиент SQL Server также отправляет идентификатор активности конкретного потока. Идентификатор активности регистрируется в сеансах расширенных событий, если сеанс запущен со включенным параметром TRACK_CAUSAILITY. Если возникли проблемы производительности, связанные с активным соединением, то можно получить идентификатор активности из трассировки доступа клиента к данным (поле ActivityID) и найти идентификатор активности в выходных данных расширенных событий. Идентификатор активности в расширенном событии — это 16-байтовый идентификатор GUID (не совпадающий с идентификатором GUID подключения клиента), к которому добавлен четырехбайтовый номер последовательности. Номер последовательности представляет порядок запроса в потоке и указывает относительный порядок пакетных инструкций и инструкций RPC для данного потока. Идентификатор ActivityID также может отправляться для пакетных инструкций SQL и запросов RPC, если отслеживание доступа к данным включено, а 18-й бит слова конфигурации отслеживания доступа к данным установлен.

В следующем образце код Transact-SQL служит для запуска сеанса расширенных событий, который будет сохраняться в кольцевом буфере и регистрировать идентификаторы активности, отправляемые с клиента при выполнении операций RPC и пакетных операций.

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)

Управляющий файл

В SQL Server 2012 управляющий файл собственного клиента SQL Server (ctrl.guid.snac11) содержит следующие данные:

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

MOF-файл

В SQL Server 2012 MOF-файл собственного клиента SQL Server содержит следующие данные:

#pragma classflags("forceupdate")
#pragma namespace ("\\\\.\\Root\\WMI")

/////////////////////////////////////////////////////////////////////////////
//
//  MSDADIAG.ETW

[
 dynamic: ToInstance,
 Description("MSDADIAG.ETW"),
 Guid("{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}"),
 locale("MS\\0x419")
]
class Bid2Etw_MSDADIAG_ETW : EventTrace
{
};

[
 dynamic: ToInstance,
 Description("MSDADIAG.ETW"),
 Guid("{8B98D3F3-3CC6-0B9C-6651-9649CCE5C752}"),
 DisplayName("msdadiag"),
 locale("MS\\0x419")
]
class Bid2Etw_MSDADIAG_ETW_Trace : Bid2Etw_MSDADIAG_ETW
{
};

[
 dynamic: ToInstance,
 Description("MSDADIAG.ETW formatted output (A)"),
 EventType(17),
 EventTypeName("TextA"),
 locale("MS\\0x419")
]
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\\0x419")
]
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\\0x419")
]
class Bid2Etw_SQLNCLI11_1 : EventTrace
{
};

[
 dynamic: ToInstance,
 Description("SQLNCLI11.1"),
 Guid("{2DA81B53-908E-7DB6-EF81-76856BB47C4F}"),
 DisplayName("SQLNCLI11.1"),
 locale("MS\\0x419")
]
class Bid2Etw_SQLNCLI11_1_Trace : Bid2Etw_SQLNCLI11_1
{
};

[
 dynamic: ToInstance,
 Description("SQLNCLI11.1 formatted output (A)"),
 EventType(17),
 EventTypeName("TextA"),
 locale("MS\\0x419")
]
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\\0x419")
]
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;
};

См. также

Основные понятия

Обработка ошибок и сообщений