我已经设置了一个 SQL Server 跟踪来捕获在我的 SQL Server 2014 框上长时间运行的查询,并添加了 Showplan XML 事件来捕获查询的执行计划。跟踪是使用持续时间过滤器创建的。在测试期间,我发现 Showplan XML 没有考虑持续时间过滤器,而是显示所有查询的执行计划。我只期待带有我的持续时间过滤器的查询及其在跟踪中的执行计划。然而,事实并非如此。它正确显示了持续时间过滤器查询,但正在为所有查询记录执行计划。
有谁知道如何解决 SQL Server 跟踪中的这个问题?
SHOWPLAN XML 事件没有包含 CPU 持续时间的列,因此您无法按持续时间进行过滤。您只能按本文中提到的列进行筛选。
https://learn.microsoft.com/en-us/sql/relational-databases/event-classes/showplan-xml-event-class
几个选择:
按其他允许的列使用过滤器。
在尽可能短的时间内捕获所有内容,加载到表中并进行过滤。请注意此过程产生的负载,尤其是在生产服务器上。
跟踪长时间运行的查询。使用该列表过滤 SHOWPLAN XML 事件。
老式的解决方法是将 SQL Trace 记录到一个表中,然后一旦开始跟踪,就在该表上创建一个 AFTER INSERT 触发器。然后触发器会将执行计划写到另一个表中。
但是,由于您使用的是 SQL2014,因此您真的应该使用扩展事件。有几种方法可以使用 XE 执行此操作,这些方法都非常出色。
这是您要完成的确切示例。