Подтвердить что ты не робот

Как сбрасывать вывод из SQL Server Profiler 2008 в CSV-подобный файл

Я отлаживаю хранимые процедуры, и сейчас я заинтересован в том, что работает в каком порядке и какие параметры в отличие от того, как быстро выполняются вещи и что может прокрасться между ними и вызвать замедление.

Итак, я захватил пару минут. Проблема в том, что слишком много материала, и мне нужно сузить его. Если я выполняю File -> Save As, я получаю следующие параметры:

  • Файл трассировки...
  • Шаблон трассировки...
  • Таблица трассировки...
  • Файл трассировки XML...
  • Файл трассировки XML для воспроизведения...

Теперь это приличные варианты, но то, что я действительно хочу, является табличным форматом, таким как CSV. Я думаю, что запятые в SP trace, вероятно, испортили бы формат CSV. Я бы с удовольствием использовал что-то еще, например || как разделитель.

Как только у меня есть табличный формат, я могу отфильтровать его с помощью grep и т.д., а затем легко обработать его с помощью Python, чтобы увидеть то, что я хочу. Я начал анализировать XML файл с помощью script, но обнаружил, что тратил слишком много времени на формат файла трассировки XML (раньше не использовал библиотеку lxml).

Итак... есть ли более простой способ? Могу ли я как минимум скопировать его в Excel?

4b9b3361

Ответ 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):

Извлечь

Убедитесь, что вы выбрали опцию все события в одном файле.

Сохранить