SQL Profiler

通过 SQL Profiler 工具程序,可监控应用程序如何访问数据库引擎。普通来说,当系统性能需要优化或是应用程序对数据库访问的结果不合预期,都可以使用该工具确认视图问题所在。

新版的 SQL Profiler 除了依然可以用来监视数据库引擎正在执行的工作,更增加了获取 Analysis Services 实例运行时所发生的事件。通过新增的跟踪选项,一样可以挑选需要录制的 AS事件、数据元以及设置过滤条件。

此外可将跟踪的事件结果以 XML 格式存储,以及通过图形的方式显示与分析死锁(Deadlock)事件。我们接着就来示范一下如何在 Profiler 中以图形显示死锁的发生。

打开 SQL Server Profiler 后点选工具栏上的“新建跟踪”按钮,接着在“连接到服务器”窗口设置服务器类型为“Database Engine”、设置服务器名称以及登录服务实例的验证方式,完成后点选“连接”按钮。

接着在“跟踪属性”窗口内点选“事件选择范围”页签。在“事件选择范围”标记右下角勾取“显示所有事件”选项,接着在图2-23上方展开 Locks 事件后勾取“Deadlock graph”事件,如图2-23所示。完成后点选“执行”按钮,开始录制。

完成跟踪事件设置后,该工具程序便开始监控目前数据库引擎的运行情况。接下来,笔者使用Management Studio 工具程序,制造死锁事件做为示范。

打开 Management Studio 并在该环境内创建两条数据库连接,执行下列语法,模拟死锁环境。在工具栏上重复点选“新建查询”按钮,打开两个T-SQL 语法的编辑窗口,分别执行下列语法。

图2-23 在“跟踪属性”窗口内勾选“Deadlock graph”事件

--A 窗口

begin tran

update Tts_Hotel_Name set H_sName='eeee' where H_ID=1648

--B 窗口

begin tran

update Tts_Hotel_Name set H_sName='ddd' where H_ID=1647

接着,依序在A 窗口内执行以下语法:

select * from Tts_Hotel_Name  where H_ID=1647

然后B 窗口内执行:

select * from Tts_Hotel_Name  where H_ID=1648

你会在某条连接执行结果的窗口内发现死锁的报错信息,内容如下:

图 死锁的报错信息

当数据库内发生死锁时,Profiler 工具程序会将结果以图表方式显示,如图所示。

图 数据库引擎事件录制的结果

你可看到图形化死锁发生的原因,描述死锁锁定的资源,连接的细节,以及被牺牲掉的连接。

在上图的“跟踪属性”对话框内勾选“Deadlock graph”事件时,Profiler 会自动在“事件提取范围”标记后方增加一个“事件提取设置”页签。你可以在该页签内的“死锁 XML”项目下,设置将死锁发生的细节单独存储成 xdl 文件,供后续分析使用。或是在主菜单上选择“文件”-“导出”-“提取 SQL Server 事件”-“提取死锁事件”,一样也可以将死锁的结果存储起来。

使用Management Studio 即可打开 xdl 结果文件,如图所示。

SQL Server 2005 的 Profiler 工具可集成操作系统的性能监视器跟踪结果,通过图形化的交互引用显示,提供用户更便利的分析环境。接下来介绍如何将 Windows 系统提供的性能监视器所跟踪的计数器(Performance Counter)数值导入到 Profiler 一并分析。

首先,必须在执行图2-23的跟踪事件中,打开系统的性能监视器,同时设置并进行记录的工作。(路径为“开始”-“系统管理工具”-“性能”),接着在控制台窗格内点选“计数器日志”后,以鼠标右键点选详细数据窗格空白处,在快捷菜单内选择“新建日志设置”。如图2-27 所示:

图2-27 通过性能监视器新建记录内容

在弹出的窗口内给一个跟踪日志名称,笔者在此命名为 trace,接着在下一个窗口内点选“添加”,如图2-28所示。在这里分别选择了Processor、Memory、PhysicalDisk等对象,各对象下的计数器依序为%Processor Time、Available Mbytes、%Disk Time,整个设置如图2-28所示:

图2-28 设置需要跟踪的对象及其下的计数器

完成设置后启动该设置文件的记录工作,开始监控目前操作系统内的对象运行情形,并在启动 Profiler 记录后,执行访问 SQL Server 的应用程序,例如 Management Studio。当跟踪一段时间后点选停止按钮,默认系统会将跟踪的事件记录在C盘的 perflogs 文件夹内。

接着,将图2-23的结果保存成 xml 数据文件。然后再使用 Profiler 重新打开它,选择主菜单内“文件”-“导入性能数据”菜单。在对话框内选择刚刚性能监视器所存储的数据,即可看到如图2-29的结果。

当然,Profiler 和性能监视器两者需要同时录制,也就是两个输出的结果其时间字段位内容需要重叠,否则就没有比较的意义了。

在图2-29中,你可以通过鼠标点选最上方窗格内的事件,在中间的窗口中便会显示你所选择录制和当时服务器性能计数器的值。据此可以判断该执行语法与服务器资源使用的因果关系。在以往,我们会需要将 Profiler 和性能计数器的结果都导入到 SQL Server 的数据表内,才容易通过 T-SQL 语法做完整的比较,现在直观且方便多了。

图2-29 导入性能数据后的结果

SQL2005 : 如何在SQL Server Profiler (事件查看器)中 跟踪查看死锁恢复的更多相关文章

  1. 【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)

    跟踪数据库sql语句的执行情况.例:一个系统,用到了sql server 数据库,这个系统共有500张表,当用户在前台页面做某一个操作时,比如插入,登录等等,我们想知道此刻是在对哪一张表操作,打开事件 ...

  2. SQL Server 2008 事件探查器(SQL SERVER Profiler)

    要想很好地优化ERP系统,可以从客户端.服务器.网络等入手,对于我们M1系统的优化来说,SQL 语句的优化就起到很重要的作用了.为此,我们展开,学习了SQL SERVER 2008的事件探查器(SQL ...

  3. SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁

    SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 转自:http://blog.51cto.com/ultrasql/160037 ...

  4. 数据库性能监测工具——SQL Server Profiler

    使用SQL Server Profiler 进行sql监控需要一些设置: 其他的就是进行分析了~ 清除SQL SERVER缓存 常用的方法: DBCC DROPCLEANBUFFERS 从缓冲池中删除 ...

  5. 【监控笔记】【1.1】监控事件系列——SQL Server Profiler

    声明:本系列是书目<sql server监控与诊断读书笔记> 联机丛书监控:https://docs.microsoft.com/en-us/sql/relational-database ...

  6. SQL Server 2008 R2 找不到 Install SQL Server Profiler 找不到 事件探查器 解决

    摘自: http://blog.csdn.net/yuxuac/article/details/8992893 SQL Server 2008 R2 Express Edition - Install ...

  7. SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event

    本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...

  8. SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟 ...

  9. 使用SQL Server 扩展事件来创建死锁的时间跟踪

    我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过“Object Explorer”连接 ...

随机推荐

  1. 课时8—弹窗modal

    首先弹窗的实现效果如下: 主要实现的代码如下: CSS: .header,.footer,.wrap-page{ position:absolute; left:; right:; backgroun ...

  2. python中lambda函数

    1.lambda函数使用如下: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右侧的是返回值 >>> g=lambda x,y:x*y>>> g(4 ...

  3. 鼠标滚轮控制侧边div上下翻动效果

    css部分: <style> * { margin: 0; padding: 0;} .wrap { width: 1000px; margin: 0 auto; overflow: hi ...

  4. 读javascript高级程序设计14-错误处理与调试

    一  错误类型 ECMA规定了常见的7种错误类型: Error: 基类型.其他常见的错误类型都继承自该类型,一般供开发人员抛出自定义错误. EvalError:该类型会在eval()函数使用异常时被抛 ...

  5. bat脚本 -- 初步接触

    服务器上的Tomcat 经常过一段时间就会死掉,为了防治Tomcat突然当掉影响业务,设置一个定时重启计划. bat脚本如下: @echo restart tomcat6 service, log t ...

  6. 9_13学习完整修改和查询&&实体类,数据访问类

    完整修改和查询:中间变量运用. 1.先查 2.执行操作 ---------------------------------------------------- namespace ADO.NET_小 ...

  7. Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法:

    Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用: Activity的 onSaveInstan ...

  8. 关于MediaPlayer的详细介绍

    1)如何获得MediaPlayer实例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp ...

  9. 正则表达式学习与python中的应用

    目录: 一.正则表达式的特殊符号 二.几种重要的正则表达式 三.python的re模块应用 四.参考文献 一.正则表达式的特殊符号 特殊符号可以说是正则表达式的关键,掌握并且可以灵活运用重要的pyth ...

  10. hdu 1041 (OO approach, private constructor to prevent instantiation, sprintf) 分类: hdoj 2015-06-17 15:57 25人阅读 评论(0) 收藏

    a problem where OO seems more natural to me, implementing a utility class not instantiable. how to p ...