Как сбрасывать вывод из SQL Server Profiler 2008 в CSV-подобный файл
Я отлаживаю хранимые процедуры, и сейчас я заинтересован в том, что работает в каком порядке и какие параметры в отличие от того, как быстро выполняются вещи и что может прокрасться между ними и вызвать замедление.
Итак, я захватил пару минут. Проблема в том, что слишком много материала, и мне нужно сузить его. Если я выполняю File -> Save As
, я получаю следующие параметры:
- Файл трассировки...
- Шаблон трассировки...
- Таблица трассировки...
- Файл трассировки XML...
- Файл трассировки XML для воспроизведения...
Теперь это приличные варианты, но то, что я действительно хочу, является табличным форматом, таким как CSV. Я думаю, что запятые в SP trace, вероятно, испортили бы формат CSV. Я бы с удовольствием использовал что-то еще, например ||
как разделитель.
Как только у меня есть табличный формат, я могу отфильтровать его с помощью grep
и т.д., а затем легко обработать его с помощью Python, чтобы увидеть то, что я хочу. Я начал анализировать XML файл с помощью script, но обнаружил, что тратил слишком много времени на формат файла трассировки XML
(раньше не использовал библиотеку lxml
).
Итак... есть ли более простой способ? Могу ли я как минимум скопировать его в Excel?
Ответы
Ответ 1
Если вы сохраните его в таблицу трассировки; вы можете получить данные в виде таблицы в SQL Server, что позволит вам манипулировать ими в соответствии с вашим сердцем; в том числе сбросить его в CSV, если все еще требуется. Столбец текстовых данных полностью представлен в таблице.
Если вы выберите Сохранить → Таблица трассировки. Вам будет предложено ввести имя таблицы и базы данных. Допустим, вы называете его ProfilerTemp на пустом месте базы данных.
Введите те; Вы можете запросить таблицу, используя
select * from scratch.dbo.ProfilerTemp
Вы увидите все в окне трассировки в таблице. Если вы не отфильтровывали только хранимые процедуры и хотите, чтобы они были выбраны
Select textdata from [Scratch].[dbo].[ProfilerTemp]
where eventclass = 10
And textdata like 'exec %'
and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'
Это отфильтровывает не вызовы процедур и любые сбросы соединения, которые могут у вас возникнуть. Возможно, вам придется добавить дополнительные фильтры в зависимости от того, что вы пытаетесь сделать.
Если вы хотите это как текстовый файл; выберите запрос - результаты в файл и запустите запрос. Это запросит имя файла и выдаст вам текст параметра в виде текстового файла.
Ответ 2
TL; DR: скопируйте в текстовый редактор вручную и затем вставьте в Excel.
У меня очень мало опыта работы с SQL Server, поэтому я не знаю, будет ли это работать для других, но это было для меня:
- Выберите нужные строки в SQL Server Profiler. Ctrl + C для копирования.
- Вставить в текстовый редактор, который может выполнять поиск и замену регулярных выражений (например, Notepad ++ в моем случае).
- Regex замените
(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?
на $1 $4 $6
- Это очищает все символы новой строки от сценариев SQL.
- Продолжайте делать "Заменить все", пока не будет найдено больше результатов.
- Regex заменит
(Batch(Starting|Completed)[^\\]*?)\r\n
на $1
- Это очищает символы новой строки от большего количества материалов SQL. Опять же, продолжайте заменять, пока не получится.
- Regex замените
\r\nset
на set
- Это очищает все новые строки из сценариев входа в систему.
- Вам может потребоваться больше замены, вы получите эту идею.
- Вставить в excel с помощью "Мастер импорта текста". Используйте вкладки в качестве разделителя.
- Сортировка по первому столбцу и удаление любых бесполезных строк (например, "Аудиторский вход" в моем случае). Вам также может потребоваться вручную переместить некоторые данные по столбцу (например, данные "EntityFramework" в моем случае).
Ответ 3
У меня было множество файлов трассировки SQL Profiler, содержащих события тупиковой блокировки, которые мне нужно было проанализировать. Я закончил преобразовывать их в один XML файл с использованием SQL Profiler, а затем читал этот XML файл с помощью Python, используя библиотеки lxml
и pandas
.
По мере того, как данные заканчиваются в pandas Dataframe
, вы можете легко преобразовать его в CSV, Excel,... или проанализировать его на Python (если вы знакомы с pandas).
script доступен как gist. Он написан специально для файлов слепого следа, поскольку у меня не было других доступных следов. Другими словами, вам может понадобиться немного настроить его, чтобы служить вашей цели. Не беспокойтесь, если файл XML большой (несколько 100 МБ); script использует iterparse()
, что означает, что файл не будет считан в память, и будут сохранены только соответствующие элементы. Например. a xdl
файл ок. 220 МБ анализировалось менее чем за 13 секунд.
Сохранение файлов трассировки в формате XML (расширение xdl
):
![Извлечь]()
Убедитесь, что вы выбрали опцию все события в одном файле.
![Сохранить]()