Трассировка данных в SqlClient

Применимо: платформа .NET Framework .NET Standard

Скачать ADO.NET

.NET имеет встроенную функцию трассировки данных, поддерживаемую поставщиком данных Microsoft SqlClient для SQL Server и сетевых протоколов SQL Server.

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

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

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

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

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

  • Проблемы, связанные с взаимодействием между поставщиком данных Microsoft SqlClient для SQL Server и собственными компонентами.

Трассировка является расширяемой для поддержки разных методов трассировки, поэтому разработчик может отслеживать проблемы на любом уровне стека приложений. Поставщик данных Microsoft SqlClient для SQL Server использует преимущества универсальных API для трассировки и инструментирования.

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

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

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

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

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

Примечание.

Поставщик данных Microsoft SqlClient для SQL Server поддерживает идентификатор серверного процесса начиная с версии 2.1.0. Его можно получить программным способом с помощью свойства SqlConnection.ServerProcessId.

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

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

Ниже приведенная инструкция SQL является выборкой, которая использует 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)

См. также