Трассировка ADO NET

Материал из razgovorov.ru
Перейти к: навигация, поиск

ADO.NET 2.0 предоставляет встроенную поддержку ведения журнала трассировки. Например с помощью этого журнала можно отследить все запросы и команды к источникам данных ADO/ OLEDB.

Первоисточник 1 Первоисточник 2


Декомпилятор C#

Настройка

Включение библиотеки трассировки

За ведение журнала трассировки ADO.NET отвечает библиотека AdoNetDiag.dll. Эта DLL находится в папке установки .NET. Например: C:\Windows\Microsoft.NET\Framework64\v4.0.30319 или c:\Windows\Microsoft.NET\Framework\v4.0.30319

- это компонент, который делает любую библиотеку классов, предназначенную для ведения журнала трассировки, поставщиком событий Windows (ETW). 

Теперь откройте редактор реестра Windows (regedit.exe) и найдите следующий ключ:

HKLMS\SOFTWARE\MicrosoftBidInterface По умолчанию ключ BidInterface не имеет подключа. Добавьте в BidInterface подключа с именем Loader и строковым значением содержащим путь до AdoNetDiag.dll. Ниже пример reg файла для системы x64, система x86 то же самое без первого параметра.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BidInterface\Loader]
":Path"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\AdoNetDiag.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BidInterface\Loader]
":Path"="C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\AdoNetDiag.dll"


Настройка поставщиков ETW для ADO.NET

Теперь вам нужно настроить AdoNetDiag.dll так, чтобы он отображался в общедоступном списке поставщиков ETW, а также в списке поставщиков WMI (инструментарий управления Windows). Это можно сделать с помощью инструмента командной строки mofcomp.exe. Средство mofcomp.exe ожидает файл .mof (формат управляемых объектов), содержащий сведения об объектах, которые будут добавлены в репозиторий WMI. Для AdoNetDiag.dll требуемый файл .mof находится в той же папке, что и сам AdoNetDiag.dll .


Откройте командную строку, перейдите к каталог с AdoNetDiag.dll и выполните команду:

mofcomp.exe AdoNetDiag.mof

Данная команда добавляет в список поставщиков : ADONETDIAG.ETW Это поставщик событий в адаптере трассировки событий Windows. System.Data.OracleClient.1 Это провайдер событий в сборке System.Data.OracleClient.dll. System.Data.SNI.1 Это поставщик событий, связанных с сетевым интерфейсом SQL Server (SNI), из сборки System.Data.dll. System.Data.1 Это провайдер событий в сборке System.Data.dll.


Чтобы убедиться, что поставщики ETW добавились, можно вывести список всех поставщиков при помощи команды.

Если не знаете какой поставщик Вам нужен, сохранить данный список в отдельном файле.

Выполните:

logman query providers

Настройка списка поставщиков для трассировки

Создайте текстовый файл в котором укажите список поставщиков и уровень трассировки.

В четырех столбцах указывается поставщик, бит управления, уровень ведения журнала и имя поставщика. Поставщик может быть указан как строковое значение, заключенное в двойные кавычки, или как GUID (GIUD и имя есть в списке поставщиков).

Пример providerinfo.txt.

{7ACDCAC8-8947-F88A-E51A-24018F5129EF}  0xFFFFFFFF  5   ADONETDIAG.ETW
{914ABDE2-171E-C600-3348-C514171DE148}  0xFFFFFFFF  5   System.Data.1
"System.Data.SNI.1"                     0xFFFFFFFF  5   System.Data.SNI.1
{04C8A86F-3369-12F8-4769-24E484A9E725}  0xFFFFFFFF  5   ADODB.1


Бит управления используется для фильтрации трассировки:

  • 0x0
  • 0x2 означает базовую информацию трассировки
  • 0xFFFFFFFF - все события провайдера

Уровень ведения журнала указывает, что будет регистрироваться.

  • 0 означает нормальное.
  • 2
  • 5 - максимально подробное


Трассировка

Запуск

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

logman.exe start MyTrace -pf providerinfo.txt -o MyTraceLog.etl -ets

start указывает, что вы хотите запустить новый журнал трассировки с именем MyTrace

  • -pf переключатель подает файл , содержащий список поставщиков , которые будут использоваться. Не забудьте использовать правильный путь к файлу ProviderInfo.txt в соответствии с вашими настройками.
  • -o переключатель указывает выходной файл для хранения информации журнала. Информация журнала хранится в двоичном формате.
  • -ets переключатель указывает , что определение коллекции трассировки будут сохранены в системе

Чтение результатов

После запуска трассировки и выполнения команд которые хотите отследить останавливаем трассировку

logman.exe stop MyTrace -ets

Конвертируем файл результата трассировки в читаемый вид

tracerpt MyTraceLog.etl

Приведенная выше команда создает два файла: Summary.txt и Dumpfile.csv.

Файл Summary.txt содержит итоговое количество событий которые удалось отследить по каждому провайдеру.

Dumpfile.txt предоставляет следующую информацию:

  • EventName: имя поставщика событий.
  • EventType: Тип события. Для поставщиков данных TextW указывает данные Unicode, а TextA указывает данные ASCII.
  • TID: идентификатор потока
  • Clock Time: 64-битное целое число, представляющее отметку времени, в которую произошло событие.
  • Ядро (мс): время процессора в миллисекундах, в течение которого событие находилось в режиме ядра.
  • Пользователь (мс): время процессора в миллисекундах, в течение которого событие находилось в пользовательском режиме.
  • Данные пользователя: данные о мероприятии.

Если вы внимательно проследите за приведенной выше трассировкой, вы легко сможете определить различные события, происходящие в системе, такие как выполнение средства чтения данных, создание DataTable и т. Д. Также обратите внимание, как трассировка использует сокращения имен пространств имен. Например, comm относится к пространству имен System.Data.Common, ds относится к System.Data, screfers к System.Data.SqlClient, prov относится к System.Data.ProviderBase и т. Д.

Для удобства чтения вы можете открыть этот файл в MS Excel или в утилите LogParser (из набора ресурсов IIS).