前言
今天整理了下sqlserver profiler(SQL Server 事件探查器),好久没有用了,确实生疏了许多,也是时候花点时间整理下了,本文是参考的原文在这里(这位仁兄有10年的博龄了,涉猎范围非常广,多多向他学习吧),我也读了一些MSDN的文章,扩展了一部分,增加了一些自己的想法。
对象介绍:
SQL Server ProfilerSQL Server Profiler 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果。这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤。
注意点:
SQL 跟踪和SQL Server ProfilerSQL Server Profiler不推荐使用。包含 Microsoft SQL Server 跟踪和重播对象的 Microsoft.SqlServer.Management.Trace 命名空间也已遭弃用。
此功能处于维护模式并且可能会在 Microsoft SQL Server 将来的版本中被删除。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。请改用扩展事件,它是轻量级的,对系统资源的消耗也会比profiler小很多,尤其在系统workload本身很大的时候更加不推荐使用profiler,这将可能是压倒骆驼的最后一根稻草,不管怎么说,现在还是做一个的介绍,主要针对我的工作中遇到的分析。更多比较详细的你可以参考 微软官方文档。
跟踪属性
一、常规
将跟踪的记录保存到指定的文件。
1.最大文件大小
指定最大文件大小的跟踪在达到最大文件大小时,会停止将跟踪信息保存到该文件。使用此选项可将事件分组成更小、更容易管理的文件。此外,限制文件大小使得无人参与的跟踪运行起来更加安全,因为跟踪会在达到最大文件大小后停止。可以为通过 Transact-SQL 存储过程或使用 SQL Server Profiler创建的跟踪设置最大文件大小。
最大文件大小选项的上限为 1 GB。默认最大文件大小为 5 MB
注意:最大文件的大小建议不要设的太大,特别是需要用于数据库引擎优化顾问使用的文件,太大的跟踪文件需要很长的分析的时间而且由于数据库引擎优化顾问也是把收集的负载文件执行一遍有时候可能会导致负载过大分析失败,同时对服务器的压力持续的时间过长对业务影响也会比较大,默认大小即可,同时启动文件滚动更新,多次分析。
2.启用文件滚动更新
如果使用文件滚动更新选项,则在达到最大文件大小时,SQL Server 会关闭当前文件并创建一个新文件。新文件与原文件同名,但是文件名后将追加一个整数以表示其序列。例如,如果原始跟踪文件命名为 filename_1.trc,则下一跟踪文件为 filename_2.trc,依此类推。如果指定给新滚动更新文件的名称已经被现有文件使用,则将覆盖现有文件,除非现有文件为只读文件。默认情况下,将跟踪数据保存到文件时,会启用文件滚动更新选项。
3.服务器处理跟踪数据
确保服务器记录每个跟踪事件,如果记录事件会显著降低性能,可以清除服务器处理跟踪数据,这样服务器不会再记录事件。
4.最大行数
指定有最大行数的跟踪在达到最大行数时,会停止将跟踪信息保存到表。每个事件构成一行,因此该参数可设置收集的事件数的范围。设置最大行数使得无人参与的跟踪运行起来更加方便。例如,如果需要启动一个将跟踪数据保存到表的跟踪,同时希望在该表变得过大时停止跟踪,则可以使其自动停止。
如果已指定并且达到了最大行数,将在运行 SQL Server Profiler的同时继续运行跟踪,但不再记录跟踪信息。SQL Server Profiler将继续显示跟踪结果,直到跟踪停止
5.启用跟踪停止时间
启用跟踪停止时间之后,到了指定的时间跟踪自动停止。每一次跟踪建议都必须得设置一个跟踪停止时间防止忘记关闭跟踪导致服务器空间被占满,默认跟踪1小时。
注意:
- 从 SQL Server 2005 开始,服务器以微秒(百万分之一秒或 10-6 秒)为单位报告事件的持续时间,以毫秒(千分之一秒或 10-3 秒)为单位报告事件使用的 CPU 时间。
- 在 SQL Server 2000 中,服务器以毫秒为单位报告持续时间和 CPU 时间。
- 在 SQL Server 2005 及更高版本中,SQL Server Profiler图形用户界面默认以毫秒为单位显示“持续时间”列,但是当跟踪保存到文件或数据库表中之后,将以微秒为单位在“持续时间”列中写入值。
二、事件选择
对于不同跟踪选择不同的跟踪事件;通过勾选“显示所有跟踪事件”可以看到所有的跟踪事件,总共有21个事件分类。用得最多的两个分类就是存储过程和TSQL这两个分类主要用来记录执行的存储过程和SQL语句,把鼠标移动到具体的事件上面会显示该事件和事件列的具体说明,接下来就分析几个常用的事件和常用的事件列。
1.显示所有跟踪事件
勾选之后会将所有的事件都显示出来
2.显示所有列
勾选之后会将所有的列显示出来
3.列筛选
对列增加一些条件,其实可以将它理解在TSQL语句的WHERE后面添加条件,对于整形列直接输入数值即可,对于字符串列就相当于like一样使用不带引号的%%模糊匹配方法。通过勾选“排除不包含值的行”之后跟踪结果就会筛选掉不满足条件的记录。
4.列组织
列组织可以理解成TSQL语句里面做GROUP BY操作,可以将相同的条件放在一起去重。
事件
1.SQL:Stmt*******
[SQL:StmtStarting]:启动TSQL语句时记录
[SQL:StmtCompleted]:完成TSQL语句时记录
这两事件的区别也同单词的意思一样,StmtStarting是记录事件的开始不关注这个事件在接下来会做什么,StmtCompleted是记录事件结束之后在开始和结束这个过程中做的一些操作比如一些常用的列"Duration","Cpu","Reads","Writes","EndTime"这些列就会出现在StmtCompleted事件中。所以如果你需要收集的记录不关心整个事件过程中的操作只需要收集数量那么可以使用Starting事件比如记录某个语句或者存储过程执行的次数等。
2.SQL:Batch******
[SQL:BatchStarting]:启动TSQL批处理时记录
[SQL:BatchCompleted]:完成TSQL批处理时记录
下面是我日常的监控的模板,在Tuning模板的基础上增加红色框的事件列,需要注意的是在筛选事件的时候SPID>50(大于50都是用户的事件,小于50的是系统事件),database这一栏需要主要,如果你选择了某一个DB,则表示只是发生在这个DB的事件,如果跨DB访问到你选中的DB,则不会被记录到,因为该事件是发生在其他的DB。
ApplicationName
1、如果是在SSMS查询界面则显示:Microsoft SQL Server Management Studio - Query,表示该语句是在SSMS界面里面执行的
2、