Доступ к диагностическим данным собственного клиента SQL Server в журнале расширенных событий
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.
Начиная с SQL Server 2012 (11.x), собственный клиент SQL Server и трассировка доступа к данным (трассировка доступа к данным) были обновлены, чтобы упростить получение диагностических сведений о сбоях подключения из буфера подключения и сведений о производительности приложения из журнала расширенных событий.
Дополнительные сведения о чтении журнала расширенных событий см. в разделе View Event Session Data.
Примечание.
Эта функция предназначена только для диагностики и устранения неполадок; она может оказаться неприменимой для целей аудита или обеспечения безопасности.
Замечания
Для операций подключения SQL Server Native Client отправит идентификатор подключения клиента. Если подключение завершилось ошибкой, то можно в кольцевом буфере подключений (Устранение связанных с подключением неполадок в SQL Server 2008 с использованием кольцевого буфера подключений) найти поле ClientConnectionID и получить диагностические данные по ошибке подключения. Идентификаторы подключений клиентов регистрируются в кольцевом буфере только при возникновении ошибки. (Если подключение завершается ошибкой перед отправкой пакета предварительной записи, идентификатор подключения клиента не будет создан.) Идентификатор подключения клиента — это 16-байтовый GUID. Идентификатор подключения клиента также можно найти в расположении вывода расширенных событий, если действие client_connection_id добавляется к событиям в сеансе расширенных событий. Если необходима дополнительная помощь в диагностике, то можно включить отслеживание доступа к данным и повторно выполнить команду соединения, а затем отследить в поле ClientConnectionID в трассировке доступа к данным операцию, завершившуюся ошибкой.
Если вы используете ODBC в собственном клиенте SQL Server и подключение успешно, вы можете получить идентификатор подключения клиента с помощью атрибута SQL_COPT_SS_CLIENT_CONNECTION_ID с SQLGetConnectAttr.
SQL Server Native Client также отправляет идентификатор действия для конкретного потока. Идентификатор активности регистрируется в сеансах расширенных событий, если сеанс запущен со включенным параметром 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 (11.x) содержимое файла управления sql Server Native Client (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 (11.x) содержимое mof-файла SQL Server Native Client:
#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;
};