SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助。

之前写了使用SQL Server Profiler追踪死锁的文章《SQL Server Profiler追踪数据库死锁》,这里再简单写SQL Server Profiler使用过程中常用到的功能。



三、自带跟踪模板

工具自带了几个比较实用的跟踪模板,一般的跟踪都可以直接使用自带的跟踪模板解决,同时自己也可以创建自定义的跟踪事件和跟踪属性保存成模板供以后使用。

SP_Counts:计算已运行的存储过程数,并且按存储过程的名称进行分组统计,此模板可以分析某时间段存储过程的行为。

Standard:记录所有存储过程和T-SQL语句批处理运行的时间,当你想要监视常规数据库服务器活动时即可使用该模板,一般的跟踪需要使用该模板就可以解决,这也是默认的模板。

TSQL:记录客户端提交给sqlserver的所有T-SQL语句的的内容和开始时间,通常使用该模板用于程序调试。

TSQL_Duration:记录客户端提交给sqlserver的所有T-SQL语句批处理信息以及执行这些语句所需的时间(毫秒),并按时间进行分组,使用该模板可以分析执行慢的查询,此模板的跟踪记录可以用于数据库引擎优化顾问分析使用。

TSQL_Grouped:按提交客户端和登入用户进行分组记录所有提交给SQLServer的T-SQL批处理语句及其开始时间,此模板用于分析某个客户或者用户执行的查询。

TSQL_Locks:记录所有开始和完成的存储过程和T-SQL语句,同时记录死锁信息,此模板用于跟踪死锁。

TSQL_Replay:记录有关已发出的T-SQL语句的详细信息,此模板记录重播跟踪所需的信息,此模板可执行跌到优化,例如基准测试。

TSQL_SPs:记录有关执行的所有存储过程的详细信息,此模板可以分析存储过程的组成步骤。如果你怀疑正在重新编译存储过程,请添加SP:Recomple事件

Tuning:记录有关存储和T-SQL语句批处理的信息以及执行这些语句所需的时间(毫秒),使用此模板生产跟踪输出可用于数据库引擎优化顾问工作负载来优化索引、优化性能。此模板和TSQL_Druation相似后者是做了时间分组。



 

这里使用SQL Server 2008 R2版本

1. 在安装SQL Server 数据库时,请保证安装了SQL Server Profiler,默认情况全部安装都会自动安装上。

2. 打开SQL Server Management Studio,在菜单中,找到“工具”菜单,找到SQL Server Profiler菜单项,如下图所示。

SQL Server Profiler简单使用_简单使用

 

3. 选择“事件选择”,勾选常用的几项即可,如下图所示。

stored procedures:

RPC:Completed

TSQL:

SQL:BatchCompleted

SQL:BatchStarting

SQL Server Profiler简单使用_sqlserver_02

 

4. 选择“显示所有列”,之后在列表中,勾选“DatabaseName”项。

SQL Server Profiler简单使用_sqlserver_03

 

5. 设置筛选器,这里设置只是过滤数据库名称,因为一个数据库实例中如果有多个数据库,那么不筛选数据库名称,那么所有数据库上的执行语句都能监控得到。

还可以设置Duration,筛选不同执行时间的sql语句,例如可以过滤执行时间较长的sql语句,选择可以优化sql语句。

如果同一个数据库,多个人访问,只想检测自己操作的语句怎么办?可以给数据库创建一个自己登陆的数据库账户(检测完后可以删除此用户),之后,在LoginName筛选器中,筛选自己登陆的数据库账户即可。

“列筛选器”中可以对databasename(数据库名称=OES_GZ1129_1)/ duration(执行时间间隔>0) 等,进行筛选,免得出现很多语句,无法查看。 

SQL Server Profiler简单使用_简单使用_04

 

设置之后点击【运行】则开始监控了,监控画面如下。

SQL Server Profiler简单使用_简单使用_05

 

对于监控的内容,可以保存,在监控界面的【文件】菜单中,选择另存为,选择想保存的格式即可,下次如果想看数据,可以直接打开保存的文件。




追踪死锁:

一般选这三项即可:

SQL Server Profiler简单使用_sqlserver_06


运行页面出现lock之后需要停止查看:

SQL Server Profiler简单使用_sqlserver_07

选择deadlock graph:显示图形

SQL Server Profiler简单使用_简单使用_08

我们可以看到第一个会话在SPID 54,第二个会话在SPID 55,一旦SQL Server发现死锁,它就会确定一个优胜者,可成功执行,和另一个作为牺牲品,要回滚。

可以到看到EventClass列中,两条SQL:BatchCompleted事件紧跟在Lock:DealLock后面,其中一条,它就是作为牺牲品,它会被回滚.而另一条SQL:BatchCompleted将会是优胜者,成功执行。

 那么,谁是优胜者,谁是牺牲品呢? 不用着急,通过DealLock graph事件,所返回来的信息,我们可以知道结果。

我们虽然不能明白DealLock graph图示的含义,但通过图中描述的关系,我们知道一些有用的信息。图中左右两旁椭圆形相当一个处理节点(Process Node),当鼠标移动到上面的时候,可以看到内部执行的代码,如Insert,UPdate,Delete.有打叉的左边椭圆形就是牺牲者,没有打叉的右边椭圆形是优胜者。中间两个长方形就是一个资源节点(Resource Node),描述数据库中的对象,如一个表、一行或一个索引。在我们当前的实例中,资源节点描述的是,在聚集索引请求获得排它锁(X)。椭圆形与长方形之间,带箭头的连线表示,处理节点与资源节点的关系,包含描述锁的模式.