Трассировка данных в ADO.NET

Microsoft.Data.SqlClient предоставляет трассировку доступа к данным через источник событий Microsoft.Data.SqlClient.EventSource. Другие компоненты ADO.NET, такие как поставщики платформы .NET для Oracle, OLE DB, ODBC и DataSet, имеют собственные средства трассировки.

Трассировка вызовов API доступа к данным может помочь диагностировать следующие проблемы:

  • Несоответствие схемы между клиентской программой и базой данных.

  • Проблемы с недоступностью базы данных или сетевой библиотекой.

  • Ошибочное SQL, жестко запрограммированное или сгенерированное приложением.

  • Неправильной логике программирования.

  • Проблемы, связанные с взаимодействием между несколькими компонентами ADO.NET или между ADO.NET и собственными компонентами.

Для поддержки различных технологий трассировки трассировка расширяема, поэтому разработчик может отслеживать проблему на любом уровне стека приложений. Хотя трассировка не является функцией, характерной только для ADO.NET, поставщики Microsoft используют обобщённые API трассировки и инструментирования.

Дополнительные сведения о том, как собирать трассировки Microsoft.Data.SqlClient, см. в разделе Включение трассировки EventSource в SqlClient.

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

Используйте идентификаторы подключения Microsoft.Data.SqlClient для сопоставления событий клиента с диагностическими сведениями сервера, такими как сбои подключения, в буфере кольца подключения и журнале расширенных событий. Сведения о том, как считывать журнал расширенных событий, см. в разделе Просмотр данных сеанса событий.

Для операций подключения Microsoft.Data.SqlClient отправляет идентификатор подключения клиента во время обмена перед входом. Если подключение завершается сбоем, найдите поле ClientConnectionID в кольцевом буфере connectivity, чтобы получить диагностические сведения о сбое подключения. Идентификаторы подключений клиентов регистрируются в кольцевом буфере только при возникновении ошибки. Если подключение не удается до предварительного обмена, сервер не получит идентификатор. Идентификатор клиентского соединения — это 16-байтовый идентификатор GUID. Идентификатор подключения клиента также можно найти в выходных данных целевого объекта расширенных событий, если добавить действие client_connection_id к событиям в сеансе расширенных событий.

Чтобы получить идентификатор подключения клиента программным способом, используйте ClientConnectionId.

Идентификатор подключения доступен для SqlConnection после успешного установления подключения. Если попытка подключения завершается ошибкой, идентификатор может быть доступен через ClientConnectionId.

Microsoft.Data.SqlClient также отправляет зависящий от потока идентификатор активности для пакетных операторов и удаленных вызовов процедур (RPC), когда его источник событий включен и сервер поддерживает заголовки трассировки. Чтобы записать идентификатор действия в сеансе расширенных событий, включите TRACK_CAUSALITY. При проблемах с производительностью при активном подключении найдите идентификатор действия в трассировке клиента, а затем в выходных данных расширенных событий. Идентификатор действия содержит 16-байтовый GUID и четырехбайтовый порядковый номер. Порядковый номер указывает относительный порядок запросов в потоке. Устаревший параметр конфигурации трассировки доступа к данным не настраивает источник событий Microsoft.Data.SqlClient.

Следующий пример использует 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)

См. также