原文链接:http://www.cnblogs.com/caishuhua226/p/3838060.html   http://www.cnblogs.com/lyhabc/articles/2946938.html

http://www.cnblogs.com/lipeng0824/p/4417581.html(还需要学习)

1)菜单路径:开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler

或者在SSMS里打开,工具--SQL Server Profiler

2)窗口左边的“常规”选项卡是一个基本设置,一般默认的就OK了。右边的“事件选择”选项卡,用来设置要跟踪的事件有哪些,列表的事件可以一一选择,基本上Sql上有的事件都有,包括你用SQL Server Management Studio操作数据库的过程都可以跟踪的到,只要单击显示所有事件就可以进行全部事件的选择了。

3)在“事件选择”选项卡中可以对统计的字段进行筛选,单击任意一个列标题可以查看列的说明

4)SQL Trace文件的收集方法

首先,SQL Trace里有哪些事件呢?在Profiler里新建一个Trace,在事件选择里选择“显示所有事件”,就能看到一个清单。里面的事件分类,在SQL2005这个版本已有21个之多,而每个分类下又有不同数目的事件。可以说,DBA想要看到的事件,基本上都能覆盖。可是事件太多,如果所有的事件都收集,产生的SQL Trace会非常庞大,SQLSERVER就受不了。

这里总结一下,在做不同的问题分析时,经常要用到的事件

Database事件组

当DBA要监视数据文件和日志文件的自动增长与自动收缩的时候,可以选择收集Database事件组下面的这些事件,不过如果只是关心文件大小是什么时候变化的,可以定期运行TSQL脚本,或者使用性能监视器。如果要分析是什么操作触发了文件大小变化,可以使用SQL Trace。

Errors and Warnings事件组

这些事件会搜集SQL里发生的所有错误和警告信息。如果SQL运行不正常,很可能这些事件会有反映。所以建议每次收集时,都把这个事件组的事件全都选上这个事件组也能从一个角度反映性能问题。例如,attention事件记录了每一个客户端取消的请求。运行超时command timeout就是其中一个类型。如果你发现一个语句运行了15秒或30秒,然后紧跟着一个attention事件,就说明这里发生了一个客户端的command timeout。而hash warning,missing column statistics,missing join predicate,sort warning很可能伴随着一个运行速度不理想的语句

Locks事件组

dead lock graph,lock:deadlock,lock:deadlock chain这三个事件是跟踪死锁的。因为死锁在SQL里发生的频率不会太高,所以在做死锁问题的时候,可以把他们三个都选上。但是要注意,要先选上“显示所有列”,再选事件,因为有些重要的字段默认的模板里没有选上。

Lock:Timeout和Lock:Timeout(timeout>0)在发生阻塞的时候,会有Lock Timeout事件发生。可是,阻塞是SQL里为了实现事务隔离所需发生的事件,所以阻塞在SQL里发生得非常普遍。收集这两个事件对问题分析的帮助不会太大。还不如用性能监视器里SQLSERVER:Locks-Lock Timeouts/sec这个计数器看一个总的趋势。所以在实际使用中,很少选他们Lock:Acquired 、Lock:Cancel、Lock:Escalation、Lock:Released:这些事件能够跟踪一句语句在运行过程中对锁资源的申请和释放过程。但是在繁忙的生产环境里,SQL会申请大量的锁资源。所以这些事件会产生大量记录。通常情况下,只会在测试环境里,测试单条语句时,才敢把他们加上。在生产环境上,要尽可能避免使用他们

“Performance”事件组

“Performance”事件组里的事件主要分两类:Auto Stats能够记录SQL里发生的自动创建或更新统计信息的事件。其他有showplan字样的,是关于各种形式的执行计划以及运行信息。他们的相同点和不同点要有目的地选择,不要重复收集。需要注意的是,执行计划一般都比较大,而每一条语句执行,都会有他的执行计划,所以如果要收集执行计划,结果日志肯定会很大。所以一定要在必要的时候,才加入执行计划事件

“Security Audit”事件组

这一组事件的目的,是监视SQL里各项和安全有关的事件,例如有人加入了一个DB User、一个Login,有人做了数据库备份、DBCC动作,有人修改了用户密码等。如果要对SQL做安全监控,这些事件都是要考虑的。如果是要一般地监视运行,可能要选择的只有Audit Login和Audit logout通过这两个事件,我们能够看到一个连接的生命周期。如果有用户抱怨连接失败,也可以跟踪Audit Login Failed。如果连接请求是被SQL拒绝的,可以看到拒绝的时间和理由。

“Server”事件组

他的下面只有三个事件,Mount Tape、 Server Memory Change 、Trace File Close。这三个事件在SQL里发生的频率都不会很高,所以加进来也不会有很大影响尤其是Server Memory Change,如果发生,对SQL性能的影响不会很大。所以这个事件是可以经常收集的。当然,如果你同时收集了性能监视器日志,那个日志里也会有包含。

“Sessions”事件组

他只有一个事件:ExistingConnection,反映在日志开始收集的时候,SQL里已经有的连接。这个事件总是要被选上的。

“Stored Procedures”事件组

这是一个很重要的事件组,事件的选择也很有讲究。常用的事件分成两类:

和编译、重编译有关的:

SP:CacheHit

SP:CacheInsert

SP:CacheMiss

SP:CacheRemove

SP:Recompile

这些事件的量也会很大。所以只有当怀疑问题和执行计划重用、或者编译、重编译相关的时候,才需要选择。其他问题不要选择收集这些事件。

关于存储过程运行的:

RPC:Completed,RPC:Starting:应用程序调用了一个存储过程。这两个事件记录了存储过程的开始和结束。一般的SQL应用程序,例如,使用ADO连接运行一个存储过程,在SQL里看到的都是RPC事件。在RPC:Completed事件里,不但有结束时间,也包含开始时间。所以如果连接正常,一个RPC:Completed事件就应该包含RPC:Starting里的信息。理论上讲,只收集RPC:Completed就可以了。但是如果连接非正常地退出,或者遇到了SQL异常,可能存储过程的运行只能看到RPC:Starting事件,看不到RPC:Completed事件,但是这种几率是比较小的。

SP:Completed,SP:Starting:如果连接是以SQL Batch的方式调用存储过程,例如在SSMS里运行sp_who,看到的会是一组SP:Completed,SP:Starting事件。像RPC一样,SP:Completed事件也能包含SP:Starting的绝大部分信息。

SP:StmtCompleted,SP:StmtStarting:前两组事件都是以整个存储过程为单位的一个复杂的存储过程,可能最后执行的指令数会达到几千行,甚至几万行,十几万行(如果里面有循环逻辑)。当知道了一个存储过程慢,就要知道是哪一部分,或者是哪一句话最慢。这时候就需要SP:StmtCompleted,SP:StmtStarting事件来帮忙。和SP:Completed、RPC:Completed不同的是,如果一个存储过程在运行过程中被cancel了(例如,遇到了运行超时),SP:Completed、RPC:Completed都能被抓到,但是正在运行的语句不会有SP:StmtCompleted,后面没有运行的语句都不会有SP:StmtCompleted,SP:StmtStarting事件。所以通过

SP:StmtCompleted,SP:StmtStarting事件可以很好地看出存储过程在被终止时执行到了哪一步。但是SP:StmtCompleted,SP:StmtStarting事件会产生大量的日志记录,所以在问题定位阶段,一般不大会加入他们。而且,为了减少事件的数目,常常只收Completed事件,不收Starting事件。当问题有了方向之后,再加入更多的事件,有目的地收集和分析。

“TSQL”事件组

这个事件组也很重要。他的事件也分两类:

和编译、重编译相关的:

Exec PreparedSQL
Prepare SQL
SQL:StmtRecompile
Unprepare SQL
其中,SQL:StmtRecompile比较常用

关于批处理执行的:

SQL:BatchCompleted SQL:BatchStarting RPC:Completed

RPC:Starting类似

SQL:StmtCompleted SQL:StmtStarting

SP:StmtCompleted SP:StmtStarting类似

相似地,在问题定位阶段,一般不会加入SQL:StmtCompleted SQL:StmtStarting。而且,为了减少事件的数目,常常只收Completed事件,不收Starting事件。当问题有了方向之后,再加入更多的事件,有目的地收集和分析

“Transactions”事件组

常用的事件有:

DTCTransaction:分布式事务的生命周期。正常来讲MSDTC事务在SQL里比较少,而且

容易出问题。所以可以默认就收集他。

SQLTransaction:SQL事务的生命周期。SQL事务是SQL非常普通的操作。如果搜集,会产生大量记录。所以只会在遇到阻塞和死锁问题,又搞不清楚这个事务

怎麽被打开时,才会借助这个事务分析问题

TransactionLog:记录SQL向事务日志文件里写入日志的动作。这个动作在SQL里非常普遍,建议不要收集

------总结

来总结一下,对于一般性问题,作者建议收集的事件有哪些
1、一个普通的Trace
Database:Data File Auto Grow、Data File Auto Shrink、Log File Auto Grow、Log File Auto Shrink
Errors and Warnings:除了Errorlog以外的所有事件
Locks:Deadlock Graph、LockEscalation(在论坛里见过)

1 ALTER TABLE dbo.Tmp_testComputeColumn SET (LOCK_ESCALATION = TABLE)
2 GO

Performance:Auto Stats
Progress Report:Online Index Operation
Security Audit:、Audit Logi、Audit Login Failed、Audit Logout、Audit Server Starts and Stops、Audit Backup/Restore Event、Audit DBCC Event
Server:所有事件
Sessions:ExistingConnection
Stored Procedures:RPC:Completed, RPC:Starting
TSQL:SQL:BatchCompleted、SQL:BatchStarting、PrepareSQL、UnprepareSQL、SQL:StmtRecompile
Transactions:DTCTransaction

如果还要缩小日志生成量,可以去掉RPC:Starting和 SQL:BatchStarting

2、一个很详细的关于性能问题的Trace

Performance:Showplan Statistics Profile

Stored Procedures:RPC:Output Parameter、SP:CacheMiss、SP:CacheRemove、SP:Recompile、SP:Completed、SP:Starting、SP:StmtCompleted、SP:StmtStarting

TSQL:SQL:StmtStarting、SQL:StmtCompleted
Transactions:SQLTransaction

如果要缩小日志生成量,可以去掉SP:Starting 、SP:StmtStarting、 SQL:StmtStarting。当然,每个人分析问题的方法都可能不一样,对这些事件的喜好也不一样。

上面只是两种建议的组合。在使用时可以根据实际问题作调整。另外,按照默认的模板,有些事件比较重要的数据字段可能没有被包含。

例如Performance下的“Showplan Statistics Profile”事件,如果不选Binary字段,可能整个执行计划就看不到了,Trace就白收了。所以如果要收Trace,建议把所有字段都选上

[网站性能3]SqlServer中Profiler的使用的更多相关文章

  1. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  2. [网站性能2]Asp.net平台下网站性能调优的实战方案

    文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言    最近帮朋友运营的平台进行了性能调优,效果还不错, ...

  3. sqlserver中Profiler的使用

    1.单击开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler,如下图:                  2.然后进入SqlServ ...

  4. input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has

    input屏蔽历史记录   设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处   ;(function($){$.ex ...

  5. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  6. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  7. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  8. 性能优化工具 MVC Mini Profiler

    性能优化工具 MVC Mini Profiler   MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC.WebForm 以及WCF 的性能分析的小程 ...

  9. [猜你喜欢]冠军“yes,boy!”分享,含竞赛源代

    [猜你喜欢]冠军“yes,boy!”分享,含竞赛源代码  DataCastle运营 发表于 2016-7-20 17:31:52      844  3  5 我是Yes,boy! ,来自东北大学计算 ...

随机推荐

  1. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

  2. 前端打包构建工具grunt快速入门(大篇幅完整版)

    打包的目的和意义就不用叙述了直接上干货 http://www.gruntjs.net/getting-started里面的教程也太简单了,需要下一番功夫去研究才行.本文将grunt打包的常用方法都用实 ...

  3. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  4. Debug Databinding Issues in WPF

    DataBinding is one of the most powerful features in WPF. But because it resolves the bindings at run ...

  5. [Tool] Open Live Writer 插件更新

    最新插件下载地址:Memento.OLW_V1.0.0.2.7z 零.历史更新记录 2016.11.24 1. 修正 cnblog 语法高亮中的 SQL.Perl 语法高亮异常 下载地址:Mement ...

  6. App内测神器之蒲公英

    一.前言部分 没使用蒲公英之前一直采用非常傻B的方式给公司App做内部测试,要么发个测试包让公司测试人员用iTUnes 自己安装 要么苦逼的一个个在我Xcode上直接安装测试包,操作起来又麻烦又苦逼, ...

  7. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  8. JDK1.8 HashMap 源码分析

    一.概述 以键值对的形式存储,是基于Map接口的实现,可以接收null的键值,不保证有序(比如插入顺序),存储着Entry(hash, key, value, next)对象. 二.示例 public ...

  9. 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)

    上篇文章说到接口安全的设计思路,如果没有看到上篇博客,建议看完再来看这个. 通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出. 对于安全 ...

  10. ADT - Eclipse 常用快捷键

    ADT - Eclipse 常用快捷键 Alt + / : 自动补全 F3 : 打开类的源码 Ctrl + D : 删除选中行 Ctrl + 1 : 自动弹出修改建议 Ctrl + Shift + J ...