SQL优化利器——sql server profiler+数据库引擎优化顾问

SQL Server Profiler的工作原理
其实SQL Server Profiler这个工具是SQL Trace的一个GUI的版本,而SQL Trace是一组脚本,自SQL Server 2000就已经有了的,这一组脚本捕获和跟踪SQL Server内部发生一些事件,并且将跟踪的数据保存以便后续使用。

从本质上说,SQL Trace就是一个非常简单的工具,它的作用就是捕获客户端应用与SQL Server之前的通信的信息。它扮演中一个非常特殊的网络嗅探器的功能,用来捕获与SQL Server相关的网络活动,同时也允许我们查

看客户端应用的请求触发了SQL Server的哪些事件。

掌握SQL Profiler的好处如下:
1.可以监视SQL Server内部发生的各种活动:例如发生在数据库引擎中的活动,发生在Analysis Services以及Integration Services中的活动。
2.监控并且确认某些查询,事务相关的性能问题等。
3.可以对执行计划进行分析。
4.可以监视并且确认SQL Server内部的发生的一些错误和警告。
5.可以捕获数据库发生的数据,并且还可以对数据库的压力进行重放。
6.可以对数据库中用户的活动进行审计跟踪。
7.可以通过多种方式对数据进行分析与跟踪。
8.可以将跟踪的数据与系统的性能计数器关联起来,从而更加全面的检查发生的问题。
9.可以将跟踪的数据以DTA来进行分析

总之,sql profiler可以跟踪并记录分析所有的数据库行为,当应用运行时,每条sql语句都被跟踪。并可通过这个查出慢的垃圾sql,从而针对性进行优化

一般情况下,最长查询时间的查询语句就是最影响性能的原因存在。它不仅占用数据库引擎大量的时间,还浪费系统资源,还影响数据库应用系统的交互速度。再对数据用应用系统进行优化时,先找出他,对其优化,在创建跟踪时,勾上TSQL-SQL:BatchCompleted.跟Stored Procedures-RPC:completed。这样就能找出来这个最长时间查询然后对其进行分析优化。

如下图所示:

 

 

SQL Profiler中常用的术语概念:

1.事件(Events)   ——简而言之就是发生的活动,例如一个存储过程的执行,就是一个活动,也是发生了一个事件。如下图部分:

 *事件选择,你就把鼠标放上去,他下面有中文的注释。自己好好看看,然后根据你自己的需要把事件勾选上来。

 

2.数据列(Data Columns)  ——就是描述事件发生的一些信息,可以看到事件发生的时候,包含了一些实事件信息,即数据列。 例如,对于RPC:Completed事件而言,包含了TextData,ApplicationName等,不是所有事件都有相同的数据列。如下图部分:

 

 

 

3.过滤器(Filters)——过滤器主要是SQL Profiler用来对发生的事件进行过滤的,只捕获感兴趣的事件。可以根据很多的来创建灵活的过滤,过滤器在使用SQL Profiler中非常有用,因为它可以决定我们收集到的数据的正确性,更加对收集到的数据的量产生很多的影响。如下图部分:(过滤数据库,只跟踪名称为DBA开头的数据库,那个dba%是个筛选监测的DatabaseName。那个%是个通配符,他的意思就是筛选select开头的数据库)

 

 

 

4.跟踪(Trace)

   这里的跟踪,不是个动词,而是一个名词!每一个跟踪包含了发生的事件以及相关的数据列信息,并且我们常常将这些信息保存在物理的文件中。跟踪文件可以以很多的方式保存:保存在 内存中,保存在数据库中,保存为XML文件等。在SQL Profiler中运行后   直接显示了跟踪信息,即跟踪信息保存在内存中。如下图部分:(将跟踪的信息保存在D盘的datafile 文件夹里)

 

 

 

 

 

 

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 profiler的使用

 1.打开系统主菜单--Microsoft SQL Server 2008 R2--->>sql server profiler  (或者 打开系统主菜单--运行---打开CMD>>profiler )

 

2.菜单 文件--新建跟踪--连接数据库--显示跟踪属性窗口

 

 

 3.选择 事件选择,勾选显示所有事件和显示所有列,再点击列筛选器

 

4. 指定筛选数据库为DBA开头的及跟踪select的语句,可以随便定义,如update%,delete%....。把那个排除不包含值的行也给带上,然后确定,运行。

 

 

 *每列从左向右,从EventClass开始,分别是:

事件分类,申请了语句,应用程序名称,操作系统用户,数据库用户,cpu占用率,读数据库次数,写数据库次说,执行脚本用时,应用程序进程号,开始时间,结束时间等。

 

接着我们就

使用数据库引擎优化顾问分析Profiler 生成的.trc 文件去优化数据库性能

 1.打开数据库引擎优化顾问,开始--Microsoft SQL Server 2008R2--性能工具--数据库引擎优化顾问,登陆数据库

 

2.打开之后,在【常规】页签这里的工作负荷中选文件就是Profiler工具中保存的的文件,把要分析的数据库跟数据库的表选上;

在【优化选项】页签的设计结构选择索引和索引视图;

然后点击 【开始分析】

 

 

 

 3.运行完成,点击【建议】页签在这里还给出了你的那些表,需要怎么建立索引和视图才能更有效的提高性能优化,点击定义列可显示优化的Sql语句,直接复制执行就要可以了。

 

posted @ 2021-12-02 17:12  小柒仔  阅读(1327)  评论(0编辑  收藏  举报