SQL Server Profiler

SQL Server事件探查器可用于创建和管理跟踪并分析和重播跟踪结果的。并可以捕获有关每个事件的数据并将其保存到文件或表中供以后分析

相关文档

SQL Server 事件探查器

SQL Server 事件探查器

Microsoft SQL Server事件探查器是SQL跟踪的图形用户界面,用于监视数据库引擎或Analysis Services的实例。并可以捕获有关每个事件的数据并将其保存到文件或表中供以后分析。例如,可以对生产环境进行监视,了解哪些存储过程由于执行速度太慢影响了性能。SQL Server事件探查器用于如下活动:

  • 逐步分析有问题的查询以找到问题的原因
  • 查找并诊断运行慢的查询
  • 捕获导致某个问题的一系列Transact-SQL语句。然后用所保存的跟踪在某台测试服务器上复制此问题,接着在该测试服务器上诊断问题
  • 监视SQL Server的性能以优化工作负荷
  • 使性能计数器与诊断问题关联
  • SQL Server事件探查器还支持对SQL Server实例上执行的操作进行审核。审核将记录与安全相关的操作,供安全管理员以后复查

运行 SQL Server Profiler

  • 从Windows 10“开始”菜单启动
    单击Windows启动图标或按Windows键,并开始键入”SQL Server Profiler 17”
  • 在数据库引擎优化顾问中启动
    在数据库引擎优化顾问的“工具”菜单上,单击SQL Server Profiler
  • 在SQL Server Management Studio中启动
    在SQL Server Management Studio的“工具”菜单中,单击“SQL Server Profiler”
    在查询编辑器中右键单击,然后选择“在SQL Server Profiler中跟踪查询”
    在活动监视器中,单击“进程”窗格,右键单击要探查的进程,然后单击“在 SQL Server Profiler 中跟踪进程”

创建跟踪

打开SQL Server Profiler在工具栏中选择“文件” → “新建跟踪”,连接到需要使用的数据库服务器,之后将会打开“跟踪属性”对话框

不做任何修改,点击“运行”。这时SQL Server Profiler将会使用默认模板设置跟踪SQL Server上发生的事件

创建跟踪模板

默认的跟踪模板对我来说太过于全面了,例如我正在调试Entity Framework中的LINQ to SQL语句,因此只希望看到LINQ to SQL语句在数据库中执行的情况。我可以通过创建一个跟踪模板并使用改跟踪模板来解决这个问题

  1. 在SQL Server Profiler在工具栏中选择“文件” → “模板” → “新建模板”
  2. 在打开的“跟踪模板属性”对话框中设置“新模板名称”
  3. 切换到“事件选择”选项卡
  4. 定位到“Events”下的“Stored Procedures”行,并展开
  5. 定位到RPC:Completed行并选中前面的复选框

使用筛选器

使用新创建的跟踪模板创建跟踪,这将只跟踪模板中指定的事件,但是仍然存在一些不需要的信息。为了进一步精简信息可以为跟踪模板定义筛选器

  1. 在SQL Server Profiler在工具栏中选择“文件” → “模板” → “编辑模板”
  2. 在打开的“跟踪模板属性”对话框中将“选择模板名称”设置为选择刚才新建的模板
  3. 切换到“事件选择”选项卡
  4. 点击“列筛选器”,这将打开“编辑筛选器”对话框
  5. 定位到“LoginName”项,展开右边的“类似于”在其下填写允许显示的值,这里我填写的是“sa”
  6. 定位到“TextData”项,展开右边的“不类似于”在其下填写不允许显示的值,这里我填写的是“exec sp_reset_connection”

使用修改后的模板再次创建跟踪,已经过滤掉了一切干扰信息,只有在Entity Framework中的LINQ to SQL语句被执行时SQL Server Profiler才会产生输出。接下来就可以通过查看输出诊断和优化代码

后记

SQL Server Profiler的功能十分强大且复杂,这里只是根据自己的实际应用举了个简单例子。更详细的功能和使用场景请查阅官方文档