Профилировщик SQL Server

Мне сказали, что SQL Profiler вносит изменения в MSDB при запуске. Так ли это, и если да, то какие изменения это вносит?

БОЛЬШЕ ИНФОРМАЦИИ

Причина, по которой я спрашиваю, заключается в том, что у нас есть администратор базы данных, который хочет, чтобы мы ранжировали запрос на изменение, когда мы запускаем профилировщик на рабочем сервере. Ее аргумент заключается в том, что он вносит изменения в БД, которые должны контролироваться.


person Michael Edwards    schedule 01.10.2009    source источник
comment
Вероятно, он просто регистрирует себя как выполняющуюся трассировку в таблицах syscollections* и т. д.   -  person RBarryYoung    schedule 01.10.2009
comment
почему вас беспокоит то, что SQL Profiler делает внутри? Это испытанный и проверенный инструмент, и если бы у него были нежелательные побочные эффекты, я уверен, что кто-то громко кричал бы, пока его не исправили...   -  person Mitch Wheat    schedule 01.10.2009


Ответы (4)


Запуск трассировки добавляет строку в msdb.sys.traces, остановка трассировки удаляет строка. Однако msdb.sys.traces представляет собой представление внутренней функции с табличным значением и не поддерживается каким-либо физическим хранилищем. Чтобы доказать это, установите msdb в read_only, запустите трассировку, наблюдайте за новой строкой в ​​msdb.sys.traces, остановите трассировку, не забудьте повернуть msdb обратно read_write. Поскольку трассировка может быть запущена в событии Profiler, когда msdb только для чтения, ясно, что обычно запись в msdb невозможна.

Теперь, прежде чем вы пойдете и ухмыльнетесь своему dba, она на самом деле права. Трассировки профилировщика могут создавать значительную нагрузку на действующую систему, поскольку отслеживаемые события должны блокироваться до тех пор, пока они не смогут сгенерировать запись трассировки. Активные, занятые системы могут столкнуться с блокировкой ресурсов типа SQLTRACE_BUFFER_FLUSH, SQLTRACE_LOCK, TRACEWRITE и других. Динамические трассировки (профилировщик) обычно хуже, файловые трассировки (sp_trace_create) лучше, но все равно могут вызывать проблемы. Таким образом, запуск новых трассировок определенно должен быть чем-то, о чем администратор базы данных должен быть проинформирован и очень тщательно рассмотрен.

person Remus Rusanu    schedule 01.10.2009

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

person Raj More    schedule 01.10.2009
comment
Вы имеете в виду работу агента SQL? Трассировка не требует запуска задания агента SQL. - person Philip Kelley; 01.10.2009
comment
@Philip Kelly: я не говорил, что задание создается автоматически. Я сказал, что при планировании трассировки будет создано задание. - person Raj More; 01.10.2009
comment
Вы имеете в виду конкретное задание агента SQL или фоновое задание/задачу? - person Philip Kelley; 01.10.2009
comment
В рамках обычной работы запускается мой запланированный профилировщик DBA. Для этого он создал задание SQL Server. - person Raj More; 02.10.2009
comment
Понятно - ваш администратор базы данных создал задание, которое создает трассировку. (Я тоже это сделал.) Эти комментарии проясняют это, поэтому я отменю свой отрицательный голос. - person Philip Kelley; 02.10.2009

Насколько мне известно, это не так (кроме тривиального изменения, отмеченного другими).

Какие изменения вы имеете в виду?

person Mitch Wheat    schedule 01.10.2009

Ничто из того, что я когда-либо читал, слышал или видел, не говорит о том, что SQL Profiler или все, что он делает или использует, оказывает какое-либо влияние на базу данных MSDB. (SQL Profiler, по сути, представляет собой графический интерфейс, обернутый вокруг подпрограмм трассировки.) Конечно, можно настроить конкретную установку/реализацию для выполнения чего угодно, и, возможно, это то, о чем кто-то думает.

Звучит как своего рода «городская легенда». Я рекомендую вам оспорить это — заставить людей, которые утверждают, что это правда, предоставить доказательства.

person Philip Kelley    schedule 01.10.2009