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