不使用 SQL Profiler 创建 SQL 跟踪

不使用 SQL Profiler 创建 SQL 跟踪

我之前读到过,可以创建一个 SQL 探查器跟踪,直接记录到表中,而无需使用 SQL 探查器 - 显然这比在 SQL 探查器捕获时运行 SQL 探查器本身要好全部事件,然后过滤分析器本身中的条目,以仅显示当前过滤器中指定的条目。直接跟踪仅收集跟踪本身中指定的事件,从而对服务器本身的影响较小。

我想建立一个跟踪来记录所有执行时间超过 1 秒的查询,但现在我似乎无法再找到那篇文章。

答案1

不久前有人向我展示了一个技巧。您可以通过使用 SQL Profiler 创建跟踪、启动它,然后立即停止它来轻松获取跟踪定义。此时,Profiler 将允许您导出 SQL 语句以在服务器端创建相同的内容。您仍然需要修改一些数据点,如 mrdenny 所述,但它完成了创建服务器端跟踪的大部分工作。该命令在 SQL2005+ 上的位置是文件 > 导出 > 脚本跟踪定义;在 SQL2000 上,它位于文件 > 脚本跟踪。

答案2

是的,建议在生产环境中使用“服务器端”跟踪,而不是使用 SQL Profiler 进行“客户端”跟踪,这并不是因为 Profiler 捕获了所有事件,而是因为运行 Profiler 所需的内存和网络开销。

正如已经建议的那样,创建服务器端跟踪的最佳方法是在 SQL Server Profiler 中设置过滤,然后将跟踪导出到脚本。

有一篇很棒的分步文章sqlserver百科这解释了如何做到这一点,这是您想要的文章吗?

答案3

运行 SQL Profiler(在客户端上运行分析器)和从 T/SQL 运行跟踪将执行完全相同的操作。过滤全部在服务器上完成。

可以通过设置 SQL Profiler 跟踪来监控 SQL PROfiler,然后启动该跟踪来查看。然后设置第二个跟踪来处理您想要的内容,然后启动第二个跟踪。在第一个跟踪中,您将看到创建跟踪和设置过滤的所有 T/SQL 命令。

您需要调整代码以使用 T/SQL 变量来处理 TraceId 可能与设置示例跟踪时使用的 TraceId 不同的事实。

相关内容