Трассировка ADO NET — различия между версиями
(Новая страница: «ADO.NET 2.0 предоставляет встроенную поддержку ведения журнала трассировки. Например с помо…») |
|||
Строка 3: | Строка 3: | ||
[https://www.codeproject.com/Articles/455562/Diagnosing-ADO-NET-with-ETW-Traces Первоисточник 1] | [https://www.codeproject.com/Articles/455562/Diagnosing-ADO-NET-with-ETW-Traces Первоисточник 1] | ||
[https://www.developer.com/microsoft/dotnet/ado-net-trace-logging/ Первоисточник 2] | [https://www.developer.com/microsoft/dotnet/ado-net-trace-logging/ Первоисточник 2] | ||
+ | |||
+ | |||
+ | [https://github.com/icsharpcode/ILSpy Декомпилятор C#] | ||
==Настройка== | ==Настройка== | ||
===Включение библиотеки трассировки=== | ===Включение библиотеки трассировки=== |
Текущая версия на 15:02, 28 июля 2021
ADO.NET 2.0 предоставляет встроенную поддержку ведения журнала трассировки. Например с помощью этого журнала можно отследить все запросы и команды к источникам данных ADO/ OLEDB.
Первоисточник 1 Первоисточник 2
Содержание
Настройка
Включение библиотеки трассировки
За ведение журнала трассировки 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).