2

我正在使用 SQL Server 2008 中的扩展事件来执行一些监视。我最感兴趣的是以下事件:

  • sqlserver.sp_statement_completed
  • sqlserver.sp_statement_starting
  • sqlserver.sql_statement_completed
  • sqlserver.sql_statement_starting

我想知道是否可以根据它们影响的表过滤掉这些扩展事件。我还没有看到任何可以帮助我执行此类过滤的谓词。由于单个存储过程实际上可能会影响多个表,我什至不确定他们会如何做到这一点,但那里的某个人可能已经想到了一些巧妙的技巧。

提前致谢!

4

1 回答 1

2

不,SQL Server 2008 中没有任何内容允许您尝试将其作为会话定义的一部分执行,但如果您使用 track_causality=on 并添加到 sqlserver,则可以将其作为事件后处理的一部分进行用于模式稳定性的 .lock_aquired 事件仅在对象级别锁定,然后过滤您要定位的对象的 object_id。然后,您必须根据 activity_xref_id 进行过滤,并且您可以为那些没有关联 sqlserver.lock_acquired 事件的 activity_xref_ids 丢弃开始/完成的事件。这可行,但它很复杂,并且还会捕获大量额外的噪声数据。

想一想,您也可以将 sqlserver.lock_acquired 事件与 sqlserver.sql_text 和 sqlserver.tsql_stack 操作一起使用,以便能够以更少的噪音做同样的事情。
是否有您希望能够与访问特定对象相关联的开始/完成事件返回的特定数据元素,或者您只是想知道访问数据库中特定对象的 SP 和 adhoc SQL?

让我知道更多细节,我会看看我是否可以制作一个演示来为你展示这个。

于 2011-09-06T21:40:00.193 回答