Запуск трассировки добавляет строку в msdb.sys.traces
, остановка трассировки удаляет строку. Однако msdb.sys.traces
является представлением внутренней табличной функции и не поддерживается никаким физическим хранилищем. Чтобы доказать это, установите msdb
на read_only
, запустите трассировку, наблюдайте за новой строкой в msdb.sys.traces
, остановите трассировку, не забудьте повернуть msdb
назад read_write
. Так как трассировка может быть запущена в событии Profiler , когда msdb
только для чтения , ясно, что обычно нет записи в msdb, которая может произойти.
Теперь, прежде чем ты пойдешь и улыбнешься своему дба, она на самом деле права. Трассировки профилировщика могут создать значительную нагрузку на работающую систему, поскольку отслеживаемые события должны блокироваться, пока они не смогут сгенерировать запись трассировки. Работающие, занятые системы могут блокироваться для ресурсов типа SQLTRACE_BUFFER_FLUSH
, SQLTRACE_LOCK
, TRACEWRITE
и других. Живые трассировки (профилировщик) обычно хуже, трассировки файлов (sp_trace_create) лучше, но все же могут вызывать проблемы. Таким образом, запуск новых следов должен быть определенно чем-то, о чем БД должен быть проинформирован и очень тщательно продуман.