[网站性能3]SqlServer中Profiler的使用
原文链接: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、Lock:Escalation(在论坛里见过)
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]对.net系统架构改造的一点经验和教训
文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...
- [网站性能2]Asp.net平台下网站性能调优的实战方案
文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错, ...
- sqlserver中Profiler的使用
1.单击开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler,如下图: 2.然后进入SqlServ ...
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- 性能优化工具 MVC Mini Profiler
性能优化工具 MVC Mini Profiler MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC.WebForm 以及WCF 的性能分析的小程 ...
- [猜你喜欢]冠军“yes,boy!”分享,含竞赛源代
[猜你喜欢]冠军“yes,boy!”分享,含竞赛源代码 DataCastle运营 发表于 2016-7-20 17:31:52 844 3 5 我是Yes,boy! ,来自东北大学计算 ...
随机推荐
- C#委托的一次"甜蜜"接触
委托是个说烂了的话题,但是依旧有好多人不知道为什么要在C#中使用委托,最近有朋友也问到我这个问题,所以举例些场景,以供那些知道怎么声明委托.怎么调用却不知道为什么要用的朋友一些参考,当然也是希望验证下 ...
- html+ccs3太阳系行星运转动画之土星有个环,地球有颗小卫星
在上一篇<html+ccs3太阳系行星运转动画>中实现了太阳系八大行星的基本运转动画. 太阳系又何止这些内容,为丰富一下动画,接下来增加“土星环”和“月球”来充盈太阳系动画. 下面是充盈后 ...
- Entity Framework 教程——概述
Entity Framework 基础 本教材将手把手教你使用entity framework,我们将使用entity framework 6.0和visual studio 2012. 以下表格是e ...
- 一次页面从Jq到Vuejs+PartialView的迁徙
题外话 本篇分享不能帮助你入门vue,入门的文章也是无意义的,官方文档http://cn.vuejs.org/v2/guide/ 已经写的不能再清晰了.希望我们勇敢的主动地给自己创造实践的机会. 手里 ...
- MVC发布到虚拟主机上出现的错误
问题1:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 现象:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 原因:站点中部署的Web使用的 ...
- Java transient关键字
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...
- Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)
Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用) 1.1. Keyword1 1.2. 前言1 2. Java项目使用.Net的aspx页面view1 ...
- tomcat项目中文乱码问题解决方法
在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...
- arcgis engine 中出现的内存堆栈溢出问题。
两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...
- Critical: Update Your Windows Secure Channel (cve-2014-6321,MS14-066)
前言:风雨欲来山满楼,下半年开始各种凶猛的漏洞层出不穷,天下已经不太平,互联网已经进入一个新的台阶 0x01 cve-2014-6321 11月的补丁月,微软请windows的用户吃了顿大餐,发布了1 ...