我被告知SQL Profiler在运行时会对MSDB进行更改。这是真的,如果是这样的话会有什么变化?
更多信息
我问的原因是我们有一位DBA希望我们在实时服务器上运行探查器时对变更请求进行排序。她的论点是,它改变了应该改变控制的DB。
答案 0 :(得分:3)
启动跟踪会在msdb.sys.traces
中添加一行,停止跟踪会删除该行。但是msdb.sys.traces
是内部表值函数的视图,不受任何物理存储的支持。要证明这一点,请将msdb
设置为read_only
,开始跟踪,观察msdb.sys.traces
中的新行,停止跟踪,记得转回msdb
read_write
。由于在msdb
只读时可以在Profiler 事件中启动跟踪,因此很明显通常没有写入msdb可能发生的事件。
在你向你的dba咧嘴笑之前,她实际上是对的。 Profiler跟踪可能会对实时系统造成很大压力,因为跟踪事件必须阻塞,直到它们可以生成跟踪记录。实时,忙碌的系统可能会遇到类型SQLTRACE_BUFFER_FLUSH
,SQLTRACE_LOCK
,TRACEWRITE
等资源的阻止。实时跟踪(分析器)通常更糟糕,文件跟踪(sp_trace_create)更好,但仍然可能导致问题。因此,开始新的痕迹应该是DBa应该被告知并且非常仔细考虑的事情。
答案 1 :(得分:1)
当您计划跟踪以收集定期信息时,我知道的唯一事件就会发生 - 添加了一项工作。
答案 2 :(得分:0)
据我所知,情况并非如此(除了其他人注意到的微不足道的变化)。
您指的是哪些变化?
答案 3 :(得分:0)
我从未读过,听过或看到的任何内容都说SQL Profiler或其执行或使用的任何内容都会对MSDB数据库产生任何影响。 (SQL Profiler本质上是一个围绕跟踪例程的GUI。)当然可以配置一个特定的设置/实现来完成任务,也许这就是某人的想法。
这听起来像是一种“都市传奇”。我建议你挑战它 - 让声称它是真实的人提供证据。