【问题标题】:Filter extended events by affected table?按受影响的表过滤扩展事件?
【发布时间】:2011-11-11 14:55:15
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: sql-server-2008 extended-events


    【解决方案1】:

    不,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?

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

    【讨论】:

    • 您好乔纳森,非常感谢您的回答。简而言之,我的客户希望通过扩展事件和 ETW 对他们的 SQL Server 数据库执行审计,因为他们的所有其他系统也将登录到 ETW,从而允许关联。我为审计选择的 4 个事件是上面问题中指定的事件。承认这将产生大量事件,他们问我们是否可以将范围缩小到......只有几个表......因此我的问题是关于按表过滤事件早期。如果我们想在 ETW 中记录数据库活动,您认为我们走在正确的轨道上吗?谢谢!
    • 仅仅因为你可以并不意味着你应该或它是有意义的。将 XEvent 数据写入 ETW 并不能保证您可以将数据与写入 ETW 的其他进程相关联。 SQL Server 仅对 ETW 使用经典提供程序,而不是 Windows Server 2008 中可用且通常由应用程序使用的基于清单的提供程序。使用标准工具关联来自 SQL 的 ETW 数据通常会导致来自 SQL 的事件指南,您必须进行大量手动映射才能理解,这些指南与其他事件松散地穿插在一起。这个实现对我来说似乎是错误的。
    • 经过我的调查,我倾向于同意你的看法。看来2008年的“SQL Server Audit”功能更适合我们的需求。另外,它似乎是建立在扩展事件之上的,它必须满足我们的性能目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多