• SQL SERVER性能调优之四(使用Profiler捕获慢查询)


    SQL SERVER性能调优之四(使用Profiler捕获慢查询)

     (一)慢的标准是什么?

    1、对于OLTP系统来说,用户等待3秒就失去耐心了,当然这是一个上限标准,系统的响应时间当然是越快越好。

    2、对于OLAP系统来说,这个标准很难确定,我所在的公司,有些复杂的报表需要在一台强劲的服务器上运行一天,但是用户也可以接受。

    3、所以我们应该关注OLTP系统的慢查询,不能让客户下订单需要10S以上才响应吧。

    (二)捕获方法

    1、首先在SSMS,工具菜单下打开Profiler。

    2、输入你用户名密码登陆。

    3、为你的跟踪取一个名字。

    4、事件选择选择,选择以下两列即可,

    Stored Procedures RPC:Completed
    TSQL                      SQL:BatchCompleted

    5、点击列筛选器,为Duration设置一个过滤值。本例子设置为3000(即3S)。

    6、点击运行。开始信息的收集。

    (三)优化捕获方法

    虽然可以采用以上方法收集慢查询,但是跟踪也会对服务器造成额外的开销。

    所以推荐在后台收集。可以在Profiler界面选择文件-》导出-》编写跟踪定义的脚本-》用于SQL 2005-2008.

    代码如下:

     

    View Code
    /****************************************************/
    /* Created by: SQL Server 2008 Profiler             */
    /* Date: 2012/04/29  18:59:08         */
    /****************************************************/
    
    
    -- Create a Queue
    declare @rc int
    declare @TraceID int
    declare @maxfilesize bigint
    set @maxfilesize = 5 
    
    -- Please replace the text InsertFileNameHere, with an appropriate
    -- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
    -- will be appended to the filename automatically. If you are writing from
    -- remote server to local drive, please use UNC path and make sure server has
    -- write access to your network share
    
    exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
    if (@rc != 0) goto error
    
    -- Client side File and Table cannot be scripted
    
    -- Set the events
    declare @on bit
    set @on = 1
    exec sp_trace_setevent @TraceID, 17, 1, @on
    exec sp_trace_setevent @TraceID, 17, 9, @on
    exec sp_trace_setevent @TraceID, 17, 6, @on
    exec sp_trace_setevent @TraceID, 17, 10, @on
    exec sp_trace_setevent @TraceID, 17, 14, @on
    exec sp_trace_setevent @TraceID, 17, 11, @on
    exec sp_trace_setevent @TraceID, 17, 12, @on
    exec sp_trace_setevent @TraceID, 10, 15, @on
    exec sp_trace_setevent @TraceID, 10, 16, @on
    exec sp_trace_setevent @TraceID, 10, 1, @on
    exec sp_trace_setevent @TraceID, 10, 9, @on
    exec sp_trace_setevent @TraceID, 10, 17, @on
    exec sp_trace_setevent @TraceID, 10, 2, @on
    exec sp_trace_setevent @TraceID, 10, 10, @on
    exec sp_trace_setevent @TraceID, 10, 18, @on
    exec sp_trace_setevent @TraceID, 10, 11, @on
    exec sp_trace_setevent @TraceID, 10, 12, @on
    exec sp_trace_setevent @TraceID, 10, 13, @on
    exec sp_trace_setevent @TraceID, 10, 6, @on
    exec sp_trace_setevent @TraceID, 10, 14, @on
    exec sp_trace_setevent @TraceID, 12, 15, @on
    exec sp_trace_setevent @TraceID, 12, 16, @on
    exec sp_trace_setevent @TraceID, 12, 1, @on
    exec sp_trace_setevent @TraceID, 12, 9, @on
    exec sp_trace_setevent @TraceID, 12, 17, @on
    exec sp_trace_setevent @TraceID, 12, 6, @on
    exec sp_trace_setevent @TraceID, 12, 10, @on
    exec sp_trace_setevent @TraceID, 12, 14, @on
    exec sp_trace_setevent @TraceID, 12, 18, @on
    exec sp_trace_setevent @TraceID, 12, 11, @on
    exec sp_trace_setevent @TraceID, 12, 12, @on
    exec sp_trace_setevent @TraceID, 12, 13, @on
    
    
    -- Set the Filters
    declare @intfilter int
    declare @bigintfilter bigint
    
    exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 201027c7-ca0b-4ae3-ad06-9be3ed6ce0aa'
    set @bigintfilter = 3000000
    exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter
    
    -- Set the trace status to start
    exec sp_trace_setstatus @TraceID, 1
    
    -- display trace id for future references
    select TraceID=@TraceID
    goto finish
    
    error: 
    select ErrorCode=@rc
    
    finish: 
    go

     

    (四)分析慢查询

    1、 对于SQL DBA来说可以总是习惯用SQL语句在解决问题。

    可以用如下语句以结果集形式返回Trace信息。

    select * from fn_trace_gettable(N'c:\MyTrace.trc',-1)

    2、可以将结果插入一个表中,分析慢查询语句的执行频率,调整写法或者优化索引在逐个解决。

     

  • 相关阅读:
    前端开发经验总结
    开发组件的原则
    jQuery deferred对象API详解
    prototype、constructor那点事儿
    text-overflow:ellipsis的那点事儿
    9 个超实用的 jQuery 代码片段
    BFC
    Console命令详解,让调试js代码变得更简单
    前端css规范
    什么是FOUC?如何避免FOUC?
  • 原文地址:https://www.cnblogs.com/slade/p/2476308.html
Copyright © 2020-2023  润新知