Можно ли автоматизировать профилировщик SQL Server 2008? - PullRequest
4 голосов
/ 19 февраля 2009

Был пост относительно полезных трюков SQL. Здесь я собирался упомянуть инструмент SQL Server Profiler , так как он помог мне написать меньше SQL. Я написал бы SQL, который будет опрашивать, понимать или подсчитывать бизнес-логику баз данных.

Profiler очень полезен, особенно когда код приложения имеет встроенный SQL, и вы хотите решить, что он делает, в кратчайшие сроки. (Также вы можете не знать, какая версия исходного кода используется в среде приложения, или, что еще хуже, там, где нет исходного кода!).

Мне было интересно, есть ли у профилировщика API, к которому я могу подключиться?

Это было бы очень полезно, когда мы хотим быстро проверить, как SQL вызывается в системе, путем установки переменной / флага среды (например, PROFILER_ON = TRUE). Затем система может запустить профилировщик SQL, задав различные свойства трассировки и записав их в журнал или таблицу, которые могут быть просмотрены группой поддержки.

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

Ответы [ 4 ]

4 голосов
/ 06 июня 2009

Вы можете использовать объекты пространства имен Microsoft.SqlServer.Management.Trace ; они предоставляют API против той же функциональности, что и SQL Profiler. Это альтернатива написанию сценариев sql для базы данных. Однако, как и SQL Profiler, эти объекты выполняют под прикрытием выполнение хранимых процедур SQL Trace (или их разновидностей) для создания, запуска и управления трассировками.

Если вы используете один экземпляр профилировщика для профилирования другого (или используете профилировщик для профилирования, удалив критерии трассировки «НЕ НРАВИТСЯ« SQL Profiler ... »» из трассировки (я думаю, что это фильтр имени приложения) » Вы увидите, что именно делает профилировщик, точно так же, как то, что вы делаете в SQL или что SMO-объекты будут делать из API.

3 голосов
/ 21 февраля 2009

Что вы можете сделать, так это настроить свою «идеальную» трассировку и записать ее в виде SQL. Затем выполните его, чтобы запустить трассировку и сохранить выходные данные в файл или таблицу.

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

Вы не можете автоматизировать его в SSMS или использовать переменную среды: код, задание, предупреждения и т. Д. Все они должны существовать на сервере.

Вы можете поместить сценарий трассировки в пакетный файл и запустить его через osql / sqlcmd, но его нужно вызывать вручную.

API-профилировщика не существует: все, что он делает, это запускает хранимые процессы, как любое другое решение.

Почему вы не можете добавить мониторинг кода SQL, который не зависит от кода приложения?

Вы также не можете использовать SMO ... только для чтения следов

Редактировать: трассировка всегда требует запуска SQL на сервере

1 голос
/ 19 февраля 2009

Вы можете использовать Системную хранимую процедуру для автоматизации профилировщика. Проверьте детали того же самого в http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htm

0 голосов
/ 08 декабря 2009

GBN получил это прямо здесь; Все, что делает SQL Profiler - это выполняет хранимые процедуры на вашем SQL Server: эти процедуры запускают, настраивают и останавливают трассировки. Это означает, что вместо того, чтобы пытаться автоматизировать профилировщик, вы просто выполняете те же процедуры трассировки и получаете то же поведение.

Для автоматического запуска и остановки трассировки вы можете использовать SQL Profiler для создания скрипта; этот скрипт может быть выполнен из командного файла. Так что вы бы сделали что-то вроде этого;

  • Открыть SQL Profiler
  • Установите желаемую трассировку в профиле трассировки; выберите интересующие вас события и файл, который вы хотите отследить.
  • Запустите трассировку, затем остановите ее.
  • Перейти к файлу | Экспорт | Определение трассировки сценария ... и сохраните файл .sql

Этот .sql файл содержит код, который вы можете запустить; если вы откроете его, вы увидите код такого типа вверху;

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
This creates a trace that writes to a file. 

Это создание трассы и присоединение событий к трассе.

Итак, теперь, чтобы начать трассировку, вы можете запланировать выполнение этого файла. Пакетный файл будет выглядеть примерно так:

osql -E -S MACHINE\INSTANCE -i "c:\my-trace-definition.sql"
...