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

ADO.NET встроенные функции трассировки данных, поддерживаемые поставщиками данных .NET для SQL Server, Oracle, OLE DB и ODBC, а также ADO.NET DataSetи сетевых протоколов SQL Server.

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

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

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

  • неверный SQL-код, фиксированный или сформированный приложением;

  • неверная программная логика;

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

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

Дополнительные сведения о настройке и настройке управляемой трассировки в ADO.NET см. в разделе "Доступ к данным трассировки".

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

В поставщике данных платформа .NET Framework для SQL Server обновлена трассировка доступа к данным (трассировка доступа к данным), чтобы упростить сопоставление событий клиента с диагностическими сведениями, такими как сбои подключения, из буфера подключения сервера и сведений о производительности приложений в журнале расширенных событий. Дополнительные сведения о чтении журнала расширенных событий см. в разделе View Event Session Data.

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

Можно получить идентификатор соединения клиента программно через свойство SqlConnection.ClientConnectionID.

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

ADO.NET также отправляет идентификатор действия, определенный для потока. Идентификатор действия записывается в сеансах расширенных событий, если сеансы запускаются с включенным параметром TRACK_CAUSALITY. Если возникли проблемы производительности, связанные с активным соединением, то можно получить идентификатор активности из трассировки доступа клиента к данным (поле 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)

См. также