关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server监控系列之调优排错

    SQL Server监控系列之调优排错

    2011-01-21 08:38:00 出处:ITJS
    分享

    使用场景

    记得某次给一家公司调优的时候,负责人发给我一堆业务的T-SQL脚本,我面对海量脚本还是从容,虽然不了解内部复杂的业务,但是我们得专注问题的关键 “慢”,我们根据查询的“慢”把他们筛选出来,一一调式优化,不就迅速解决问题吗?三天后,负责人含泪握着我的手,哥们辛苦了,查询响应得到了质的改善。

    跟踪提供者

    SQL Server 为我们两者提供跟踪的方式:一种是一个物理文件(可保存在本机或者UNC网络路径),一种是行集。对于后者大家应该比较熟悉

    image

    这个工具在 SSMS 的 工具 –> SQL Profile

    AB490696-8C76-4819-A08D-1D14E3E828BA

    详细的我暂时不介绍,先说说两者的区别和类同点 DIFFAndSame(行集,文件提供者)。

    两者都是用类似Buffer来保存当前的事件数据,很明显是为了减少IO的压力,这样可以不阻塞和尽量不遗漏 事件数据,当Buffer 到达一定量时候可能才会Flush到磁盘或者发送到网络的终端(客户端)显示监控行集。

    物理文件保存监控结果的方式的重要保证是不能遗漏任何事件,一旦IO降速的时候,可能会影响到整个T-SQL的执行情况。

    SELECT * FROM sys.dm_os_wait_stats WHERE wait_type IN ('SQLTRACE_LOCK','IO_COMPLETION'); 

    我使用这个语句来监控TRACE 和IO 完成对我当前机器的影响,我的某个客户的IO情况:                      

    wait_type    waiting_tasks_count   wait_time_ms   max_wait_time_ms   signal_wait_time_ms         IO_COMPLETION   66030898   24377499   3634      418960         SQLTRACE_LOCK   12007   175943   1001   1281 

    因为我进行了大量的过滤,因此这个值还是能够接受的,影响不是特别大。

    行结果集的方式,其实也是我们最熟悉的,就是使用SQL Server Profile监控GUI 直接展现给我们看到的。但是,我是非常不建议使用的,首先假如Buffer满了,它有一定的延迟,可能会抛弃事件已清空缓存区继续接受事件,而事件没有发送到Client,也没有写到物理文件,自然就丢失了。比如,SQL Server Profile 在DB服务器进行监控,因为高负载的机器再用来展示,很有可能就会丢失事件,另外物理文件方式,其实是接受一个足够大的Buffer,进行的大块写操作,性能是优于行集的。

    image(行集)

    保密性原则

    SQL Server的安全特性会自动过滤 包含隐私的数据,比如密码。我在我的SSMS中执行了如下的语句:

    EXEC sp_password 'pp','pp1','sa'; 

    这是修改sa帐号密码的系统sp,我打开了SQL Server Profile –> 选择了T-SQL 监控模版

    image

    然后执行上面的存储过程,监控结果:

    image

    监控结果:--*sp_password----------------------------

    SQL Server Profile

    使用SQL Server Profile GUI工具还是很多优势,首先是减少了我们监控的复杂性,可以款速的建立监控,在跟踪属性中,可以可以选择MSSQL为我们提供的模版,包括常用的T-SQL、T-SQL Duration、T-SQL Locks模版分别监控当前DB运行的所有查询,所有查询的耗时、所有的锁定状态。

    在跟踪属性 –> 选择事件选择 我们可以选择自己需要的事件,所有的事件在MSDN 都有定义->单击列筛选器 可以自定义过滤,排序噪点干扰因素

    image(我随便选择了一个耗时 = 500 微妙的过滤条件)

    其他的模版大家可以自己看看MSDN 手册,自己尝试一下:SQL Server 2008 R2 本机  MSDN

    服务器端跟踪和物理方式收集

    SQL Server Profile 只是对一些存储过程的封装,我更倾向于,自己定义常用的脚本,将监控结果保存在本机,用来大量的分析和存档。

    当然涉及4个存储过程,虽然设置过滤的脚本非常麻烦,但是SQL Server Profile 可以利用 文件->导出 可以导出监控脚本意味着,我们不需要编写复杂的T-SQL 脚本,不过还是建议大家熟悉这几个存储过程:

    sp_trace_create 定义跟踪 ,创建的跟踪会在sys.traces查询的到。

    s_trace_setevent 设置监控事件

    sp_trace_setfilter 设置过滤

    sp_trace_setstatus 设置跟踪的状态  常用的是  sp_trace_setstatus @traceid,0 停止功能 、sp_trace_setstatus @traceid,2 移除跟踪,这将导致sys.traces最终查询不到该跟踪

    其实整个跟踪还是比较简单的。我这里有一个常用的脚本:

    用来 监控超过指定秒数 和 数据库 的 批处理和存储过程 语句(超过5MB的文件,会执行ROLLOVER,根据文件名在后面添加类似_1,_2.trc的跟踪结果):

    CREATE PROC [dbo].[sp_trace_sql_durtion]      @DatabaseName nvarchar(128),      @Seconds bigint,      @FilePath nvarchar(260)  AS BEGIN DECLARE @rc int,@TraceID int,@MaxFileSize bigint;  SET @MaxFileSize = 5;     EXEC sp_trace_create @TraceID OUTPUT,2,@FilePath,@MaxFileSize,NULL;     IF @rc != 0       RETURN;     DECLARE @On bit;  SET @On = 1;     EXEC sp_trace_setevent @TraceID,10,35,@On;  EXEC sp_trace_setevent @TraceID,10,1,@On;  EXEC sp_trace_setevent @TraceID,10,13,@On;  EXEC sp_trace_setevent @TraceID,41,35,@On;  EXEC sp_trace_setevent @TraceID,41,1,@On;  EXEC sp_trace_setevent @TraceID,41,13,@On;     SET @Seconds = @Seconds * 1000000;     EXEC sp_trace_setfilter @TraceID,13,0,4,@Seconds;     IF @DatabaseName IS NOT NULL     EXEC sp_trace_setfilter @TraceID,35,0,0,@DatabaseName     EXEC sp_trace_setstatus @TraceID,1  SELECT TraceID = @TraceID;     END 

    参数非常的明了,数据库名称、执行事件超过多少秒、保存的路径。

    当我们运行这个脚本一段事件以后,可以快速的发现大量耗时的T-SQL,我们可以通过

    SELECT * FROM fn_trace_gettable(N'监控文件路径',1); 

    来查看行方式的结果。

    同样的富有创造力的读者可以自己创建监控锁定,监控死锁等方式保存文件,但是我的建议是尽可能的减少噪音,也就是说大家要达到什么目地就在《Microsfot SQL Server 2005 技术内幕: T-SQL 程序设计》 中有一个正则,用来将类似的语句全部组合成,只有参数形式替换具体值的SQL CLR,但是我认为那个正则还有bug,等我空了给大家写一个,自己也能使用的更完善。

    监控异常

    在上个系列中,讲述了具体的SQL Event抓去的异常,可以及时通知,但是具体的异常信息,并不是特别详细。因此我们可以选择事件中的Error来添加有关T-SQL批处理和SP的所有异常,用于分析,这个跟踪非常有利于我们监控一些异常情况!!!我创建了一个跟踪的脚本,和上面的跟踪事件的脚本一样,超过5MB RollOver。大家要定期的执行这个跟踪,虽然不建议长期开启,但是定期监控处理异常是有利我们系统更加长时间运作的。

    CREATE PROC [dbo].[sp_trace_sql_exception]      @FilePath nvarchar(260)  AS DECLARE @rc int,@TraceID int,@Maxfilesize bigint SET @maxfilesize = 5         EXEC @rc = sp_trace_create @TraceID output, 2, @FilePath, @Maxfilesize, NULL   IF (@rc != 0)       RETURN;     DECLARE @on bit SET @on = 1  EXEC sp_trace_setevent @TraceID, 33, 1, @on EXEC sp_trace_setevent @TraceID, 33, 14, @on EXEC sp_trace_setevent @TraceID, 33, 51, @on EXEC sp_trace_setevent @TraceID, 33, 12, @on EXEC sp_trace_setevent @TraceID, 11, 2, @on EXEC sp_trace_setevent @TraceID, 11, 14, @on EXEC sp_trace_setevent @TraceID, 11, 51, @on EXEC sp_trace_setevent @TraceID, 11, 12, @on EXEC sp_trace_setevent @TraceID, 13, 1, @on EXEC sp_trace_setevent @TraceID, 13, 14, @on EXEC sp_trace_setevent @TraceID, 13, 51, @on EXEC sp_trace_setevent @TraceID, 13, 12, @on    DECLARE @intfilter int,@bigintfilter bigint;     EXEC sp_trace_setstatus @TraceID, 1     SELECT TraceID=@TraceID  GOTO finish     ERROR:   SELECT ErrorCode=@rc     FINISH:  

    定期执行吧,同志们,找异常。。。

    默认跟踪和黑盒跟踪

    在sys.traces中的TraceID = 1的跟踪是SQL Server 默认跟踪,这个跟踪比较轻量级,一般监控服务器的启用停止,对象的创建和删除,日志和数据文件自动增长以及其他数据库的变化。(监控那些没事删错了表的人,是最好的,当然前提不要都使用一个帐号!)

    可以通过

    EXEC sp_configure 'default trace enabled',0;  RECONFIGURE WITH OVERRIDE; 

    来关闭默认跟踪。

    黑盒跟踪,就是可以帮助我们诊断数据库没事自个奔了的异常,在MSDN 搜索sp_create_trace的时候应该也发现了

    image

    的选项,那么我们也能创建一个类似的存储过程来快速的创建黑盒跟踪,帮助我们诊断一些异常!

    CREATE PROCEDURE sp_trace_blackbox      @FilePath nvarchar(260)  AS BEGIN     DECLARE @TraceID int,@MaxFileSize bigint     SET @MaxFileSize = 25;      EXEC sp_trace_create @TraceID OUTPUT,8,@FilePath,@MaxFileSize      EXEC sp_trace_setstatus @TraceID,1;   END 

    我这里提供@FilePath = NULL参数,这个默认就保存在SQL Server的数据文件夹中。

    结尾

    这里详细的描述了SQL Server Trace 的各种功能特性,有兴趣的朋友可以深入到MSDN研究监控,我这是也只是一笔带过,也参考了MSDN 和《Microsoft SQL Server 2005调优》那本书,下面的监控可能和大家讲述 DDL触发器监控,C2审核以及SQL Server的事件通知(涉及的Service Broker我会开一个系列和大家详细说说Service Broker),最后的结束可能就是说说2008的数据收集监控

    原文链接:http://www.cnblogs.com/bhtfg538/archive/2011/01/21/1939706.html

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。