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

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

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

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

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

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

Итак... есть ли более простой способ? Можно ли хотя бы скопировать его в Excel как-нибудь?

3 ответа

Решение

Если вы сохраните его в таблице трассировки; вы можете получить данные в виде таблицы в 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'

Это отфильтровывает не вызовы процедур и любые сбросы соединения, которые у вас могут быть. Возможно, вам придется добавить дополнительные фильтры в зависимости от того, что вы пытаетесь сделать.

Если вы хотите это как текстовый файл; выберите запрос - результаты в файл и запустите запрос. Это запросит имя файла и выдаст вам текст параметра в виде текстового файла.

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
    • Это очищает все новые строки из сценариев Audit Login
  • Возможно, вам придется сделать больше замены, вы поняли идею.
  • Вставьте в Excel, используя "Мастер импорта текста". Используйте вкладки в качестве разделителя.
  • Сортируйте по первому столбцу и удалите все бесполезные строки (например, "Audit Login" в моем случае). Вам также может понадобиться вручную переместить некоторые данные по столбцу (например, данные "EntityFramework" в моем случае)

Попробуй это:

  1. Открыть SSMS
  2. бежать select * from fn_trace_gettable('D:\abc.trc',default)
  3. Щелкните правой кнопкой мыши и выберите с заголовками
  4. Вставьте в Excel

У меня была куча файлов трассировки SQL Profiler, содержащих события трассировки тупиков, которые мне нужно было проанализировать. В итоге я преобразовал их в один файл XML с помощью SQL Profiler, а затем прочитал этот файл XML с помощью Python, используя lxml а также pandas библиотеки.

Как данные заканчиваются в пандах Dataframe, вы можете легко конвертировать его в CSV, Excel, ... или анализировать его на Python (если вы знакомы с пандами).

Сценарий доступен как суть. Он написан специально для файлов трассировки тупиков, поскольку у меня не было других доступных трассировок. Другими словами, вам, возможно, придется немного подправить его, чтобы он служил вашей цели. Не беспокойтесь, если файл XML большой (несколько 100 МБ); скрипт использует iterparse(), это означает, что файл не будет считан в память и будут записаны только соответствующие элементы. Например xdl файл ок. 220 МБ было проанализировано менее чем за 13 секунд.

Сохранение файлов трассировки в формате XML (xdl расширение):

экстракт

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

Сохранить

Другие вопросы по тегам