我正在尝试使用 SQL Profiler (SQL 2008) 解决这个问题。
在生产中运行跟踪几天后,错误再次发生,我正在诊断它。
问题是跟踪有 400k 行,其中 99.9% 来自“报表服务器”。
我什至不知道它为什么会打开,但它似乎每秒都会 ping SQL Server...
您可以将捕获的跟踪加载到 SQL Server Profiler 中:使用 SQL Server Profiler 查看和分析跟踪。
或者您可以加载到像ClearTrace(免费版)这样的工具来执行工作负载分析。
您可以加载到 SQL Server 表中,如下所示:
SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)
然后您可以运行查询来聚合数据,例如:
SELECT
COUNT(*) AS TotalExecutions,
EventClass,
CAST(TextData as nvarchar(2000)) ,
SUM(Duration) AS DurationTotal ,
SUM(CPU) AS CPUTotal ,
SUM(Reads) AS ReadsTotal ,
SUM(Writes) AS WritesTotal
FROM
TraceTable
GROUP BY
EventClass,
CAST(TextData as nvarchar(2000))
ORDER BY
ReadsTotal DESC
另请参阅:MS SQL Server 2008 - 如何记录并查找最昂贵的查询?
在启动捕获的跟踪之前设置过滤器也是很常见的。例如,常用的过滤器是仅限制需要超过一定读取次数(例如 5000)的事件。
本地加载.trc,然后使用保存到数据库到本地数据库,然后查询你的hearts内容。
这些建议对于现有跟踪非常有用 - 如果您想在跟踪发生时对其进行过滤,您可以在启动跟踪之前设置事件过滤器。
根据我的经验,最有用的过滤器是应用程序名称 - 为此,您必须确保用于连接到数据库的每个连接字符串中都有适当的应用程序名称值,即:
“...服务器=MYDB1;集成身份验证=SSPI;应用程序名称=MyPortal;...”
然后在新跟踪的跟踪属性中,选择事件选择选项卡,然后单击列过滤器...
选择 ApplicationName 过滤器,并将值添加到 LIKE 以仅包含您指定的连接,即在 LIKE 字段中使用 MyPortal 将仅包含具有该应用程序名称的连接的事件。
这将阻止您收集 Reporting Services 生成的所有数据,例如,并使后续分析速度更快。
还有很多其他过滤器可用,因此,如果您知道自己在寻找什么,例如长时间执行(持续时间)或大型 IO(读取、写入),那么您也可以对其进行过滤。
从 SQL Server 2005 开始,您可以直接从 SQL Profiler 过滤 .trc 文件内容;无需将其导入 SQL 表。只需按照此处建议的步骤操作即可:
http://msdn.microsoft.com/en-us/library/ms189247(v=sql.90).aspx
附加提示:您可以使用“%”作为过滤通配符。例如,如果您想像 SRV 一样按 HOSTNAME 进行过滤,那么您可以使用 SRV%。
在这里您可以找到一个完整的脚本来查询默认跟踪以及可以过滤的事件的完整列表:
http://zaboilab.com/sql-server-toolbox/anayze-sql-default-trace-to-investigate-instance-events
您必须查询 sys.fn_trace_gettable(@TraceFileName,default) 加入 sys.trace_events 来解码事件编号。