44

我正在调试存储过程,现在我感兴趣的是什么以什么顺序运行以及哪些参数,而不是运行速度有多快,以及什么可能潜入并导致减速。

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

  • 跟踪文件...
  • 跟踪模板...
  • 跟踪表...
  • 跟踪 XML 文件...
  • 跟踪用于重放的 XML 文件...

现在,这些都是不错的选择,但我真正想要的是表格格式,例如 CSV。我认为 SP 跟踪中的逗号可能会弄乱 CSV 格式。我很乐意使用其他东西,例如||分隔符。

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

那么......有没有更简单的方法?我至少可以以某种方式将其复制到 Excel 吗?

4

4 回答 4

70

如果将其保存到跟踪表中;您可以在 SQL Server 中的表中获取数据,这将使您可以随心所欲地操作它;如果仍然需要,包括将其转储到 CSV。文本数据列在表中完全表示。


如果您选择SaveTrace Table。系统将提示您输入表和数据库的名称。假设您在数据库中将其称为 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'

这会过滤掉非过程调用和您可能拥有的任何连接重置。根据您要执行的操作,您可能需要添加更多过滤器。

如果您希望将其作为文本文件输出;选择查询 - 要归档的结果并运行查询。这将提示输入文件名并将参数文本作为文本文件提供给您。

于 2010-12-10T15:04:38.257 回答
3

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

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

  • 在 SQL Server Profiler 中选择所需的行。Ctrl + C 复制。
  • 粘贴到可以进行正则表达式搜索和替换的纯文本编辑器中(例如我的 Notepad++)。
  • 正则表达式替换(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?$1 $4 $6
    • 这会清除 SQL 脚本中的所有换行符。
    • 继续执行“全部替换”,直到找不到更多结果。
  • 正则表达式替换(Batch(Starting|Completed)[^\\]*?)\r\n$1
    • 这会清除更多 SQL 内容中的换行符。再次,继续更换,直到没有结果。
  • 正则表达式替换\r\nsetset
    • 这会清除审计登录脚本中的所有换行符
  • 你可能需要做更多的更换,你明白了。
  • 使用“文本导入向导”粘贴到 Excel 中。使用制表符作为分隔符。
  • 按第一列排序并删除任何无用的行(例如,在我的情况下为“审核登录”)。您可能还需要在列上手动移动一些数据(例如,在我的情况下为“EntityFramework”数据)
于 2016-10-14T07:07:19.057 回答
2

试试这个:

  1. 打开 SSMS
  2. select * from fn_trace_gettable('D:\abc.trc',default)
  3. 右键单击并选择标题
  4. 将其粘贴到 Excel 中
于 2020-10-01T11:44:02.990 回答
0

我有一堆 SQL Profiler 跟踪文件,其中包含我需要分析的死锁跟踪事件。我最终使用 SQL Profiler 将它们转换为单个 XML 文件,然后使用 Pythonlxmlpandas库读取该 XML 文件。

由于数据以 pandas 结尾Dataframe,您可以轻松地将其转换为 CSV、Excel 等,或者在 Python 中分析它(如果您熟悉 pandas)。

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

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

提炼

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

节省

于 2016-03-31T09:28:31.070 回答