Есть ли способ отфильтровать трассировку SQL Profiler? - PullRequest
10 голосов
/ 21 сентября 2009

Я пытаюсь решить проблему , эту проблему , используя SQL Profiler (SQL 2008)

После нескольких дней запуска трассировки в производстве, наконец, снова произошла ошибка, и теперь я пытаюсь диагностировать причину. Проблема в том, что в трассировке 400 тыс. Строк, 99,9% из которых поступают с «сервера отчетов», и я даже не знаю, почему он включен, но, похоже, SQL-сервер проверяет связь каждую секунду ...

Есть ли способ отфильтровать некоторые записи из трассы, чтобы можно было посмотреть на остальные?
Могу ли я сделать это с текущим файлом .trc, или мне придется снова запустить трассировку?
Есть ли другие приложения для просмотра файла .trc, которые могут предоставить мне эту функциональность?

Ответы [ 5 ]

22 голосов
/ 21 сентября 2009

Вы можете загрузить захваченную трассировку в SQL Server Profiler: Просмотр и анализ трассировок с помощью SQL Server Profiler .

Или вы можете загрузить инструмент, например ClearTrace (бесплатная версия), для выполнения анализа рабочей нагрузки.

Вы можете загрузить таблицу SQL Server следующим образом:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Затем вы можете запустить запрос для агрегирования данных, подобных этим:

SELECT 
  COUNT(*) AS TotalExecutions,     
  EventClass, 
  CAST(TextData as nvarchar(2000)) ,
  SUM(Duration) AS DurationTotal ,
  SUM(CPU) AS CPUTotal ,
  SUM(Reads) AS ReadsTotal ,
  SUM(Writes) AS WritesTotal
FROM 
  TraceTable
GROUP BY 
  EventClass, 
  CAST(TextData as nvarchar(2000))
ORDER BY 
  ReadsTotal DESC

См. Также: MS SQL Server 2008 - Как я могу войти и найти самые дорогие запросы?

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

4 голосов
/ 21 сентября 2009

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

3 голосов
/ 21 сентября 2009

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

Самым полезным фильтром в моем опыте является имя приложения - для этого вы должны убедиться, что каждая строка подключения, используемая для подключения к вашей базе данных, имеет соответствующее значение имени приложения, то есть:

"... Сервер = MYDB1; Интегрированная аутентификация = SSPI; Имя приложения = MyPortal; ..."

Затем в свойствах трассировки для новой трассы выберите вкладку «Выбор событий», затем нажмите «Фильтры столбцов» ...

Выберите фильтр ApplicationName и добавьте значения в LIKE, чтобы включить только те соединения, которые вы указали, т. Е. Использование MyPortal в поле LIKE будет включать в себя только события для соединений с этим именем приложения.

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

Существует также множество других доступных фильтров, поэтому, если вы знаете, что ищете, например, длинное выполнение (Duration) или большой IO (Reads, Writes), то вы можете фильтровать и по нему.

2 голосов
/ 31 июля 2013

Начиная с SQL Server 2005, вы можете фильтровать содержимое файла .trc непосредственно из SQL Profiler; без импорта его в таблицу SQL. Просто следуйте процедуре, предложенной здесь:

http://msdn.microsoft.com/en-us/library/ms189247(v=sql.90).aspx

Дополнительная подсказка: вы можете использовать '%' в качестве шаблона фильтра. Например, если вы хотите фильтровать по HOSTNAME, например, SRV, вы можете использовать SRV%.

0 голосов
/ 18 июня 2013

Здесь вы можете найти полный скрипт для запроса трассировки по умолчанию с полным списком событий, которые вы можете отфильтровать:

http://zaboilab.com/sql-server-toolbox/anayze-sql-default-trace-to-investigate-instance-events


Вы должны запросить sys.fn_trace_gettable (@ TraceFileName, по умолчанию), присоединяясь к sys.trace_events, чтобы декодировать номера событий.

...