代码之家  ›  专栏  ›  技术社区  ›  Hamish Grubijan

如何将SQL Server Profiler 2008的输出转储到类似CSV的文件

  •  39
  • Hamish Grubijan  · 技术社区  · 15 年前

    我正在调试存储过程,现在我感兴趣的是什么按什么顺序运行,哪些参数与运行速度相反,以及哪些可能会潜入并导致速度减慢。

    所以,我捕捉到了几分钟的痕迹。问题是东西太多了,我需要缩小范围。如果我做了 File -> Save As ,我得到以下选项:

    • 跟踪文件。。。
    • 跟踪模板。。。
    • 跟踪表。。。
    • 跟踪XML文件。。。
    • 用于重播的跟踪XML文件。。。

    现在,这些都是不错的选择,但我真正想要的是一个表格格式,如CSV。我认为SP trace中的逗号可能会破坏CSV格式。我很乐意用别的东西,比如 || 作为分隔符。

    一旦我有了表格格式,我就可以用 grep ,等等,然后用Python轻松地处理它,以查看我想要的确切内容。我开始用脚本解析XML文件,但发现自己在跟踪上花了太多时间 XML 文件格式(未使用 lxml 之前的库)。

    所以。。。有更简单的方法吗?我至少可以把它复制成Excel吗?

    3 回复  |  直到 9 年前
        1
  •  65
  •   Uwe Keim    7 年前

    如果将其保存到跟踪表中,则可以在SQL Server中获取表中的数据,该表将允许您将其操作到心形内容中;如果仍然需要,包括将其转储到CSV中。文本数据列在表中完全表示。


    如果你选择 保存 → 跟踪表 . 系统将提示您输入表和数据库的名称。假设您在数据库草稿中将其称为ProfilerTemp。

    输入这些;您可以使用

    select * from scratch.dbo.ProfilerTemp
    

    您将在表的跟踪窗口中看到所有内容。如果您不筛选到仅存储过程,而只希望它们在选择中

    Select textdata from [Scratch].[dbo].[ProfilerTemp] 
      where eventclass = 10 
      And textdata like 'exec %' 
      and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'
    

    这将过滤掉非过程调用,并重置您可能拥有的任何连接。您可能需要添加更多的过滤器,这取决于您要做什么。

    如果希望将其作为文本文件输出,请选择query-results to file并运行查询。这将提示输入文件名,并将参数文本作为文本文件提供给您。

        2
  •  3
  •   Aaron Campbell    9 年前

    TL;DR:复制到文本编辑器中,手动准备,然后粘贴到Excel中。

    我很少有使用SQL Server的经验,所以我不知道这是否适用于其他人,但它确实适用于我:

    • 在SQL Server探查器中选择所需的行。按Ctrl+C复制。
    • 粘贴到可以执行正则表达式搜索和替换的纯文本编辑器中(例如,在我的示例中是记事本+)。
    • 正则表达式替换 (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? 具有 $1 $4 $6
      • 这将清除SQL脚本中的所有换行符。
      • 继续做“全部替换”直到没有更多的结果。
    • 正则表达式替换 (Batch(Starting|Completed)[^\\]*?)\r\n 具有 $1
      • 这将清除更多SQL内容中的换行符。再次,继续更换直到没有结果。
    • 正则表达式替换 \r\nset 具有 set
      • 这将清除审核登录脚本中的所有换行符
    • 你可能需要做更多的更换,你知道的。
    • 使用“文本导入向导”粘贴到excel中。使用制表符作为清除器。
    • 按第一列排序并删除所有无用的行(例如,在我的示例中为“审核登录”)。您可能还需要在列上手动移动一些数据(例如,在我的示例中是“EntityFramework”数据)
        3
  •  0
  •   DocZerø    10 年前

    我有一堆SQL分析器跟踪文件,其中包含需要分析的死锁跟踪事件。最后,我使用SQL Profiler将它们转换为一个XML文件,然后使用Python读取该XML文件,使用 lxml pandas 图书馆。

    当数据最终在熊猫身上 Dataframe ,您可以轻松地将其转换为CSV、Excel、。。。或者用Python分析(如果你熟悉熊猫)。

    脚本可用作 gist . 它是专门为死锁跟踪文件编写的,因为我没有其他可用的跟踪。换言之,你可能需要稍微调整一下,以达到你的目的。不要担心XML文件是否很大(几个100 MBs);脚本使用 iterparse() ,这意味着不会将文件读入内存,只会捕获相关元素。例如,一个 xdl 不到13秒就解析了大约220MB的文件。

    将跟踪文件保存为XML( xdl公司 扩展名):

    Extract

    确保选择了选项 单个文件中的所有事件 .

    Save

    推荐文章