sqlserver 性能调优脚本

摘要:
--查看日志空间使用情况DBCCSQLPERF(LOGSPACE)SELECTTOP10st。textASSQL_Full—父完整语句,SUBSTRING(st.text,(qs.statement_start_offset/2)+1,((CASEstatement_end_offsetWHEN-1THENDATALENGTH(st.text)ELSEqs。语句结束偏移
-- 查看日志空间占用率
DBCC SQLPERF ( LOGSPACE)
SELECT TOP 10

        st.text AS SQL_Full                                        --父级完整语句

        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

            ((CASE statement_end_offset 

            WHEN -1 THEN DATALENGTH(st.text)

            ELSE qs.statement_end_offset END 

            - qs.statement_start_offset)/2) + 1) as SQL_Part    --统计对应的部分语句

        , CAST( ((qs.total_elapsed_time / 1000000.0)/qs.execution_count) AS DECIMAL(28,2) ) AS [平均消耗秒数]

        , CAST(qs.last_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最后完成消耗秒数]

        , qs.last_execution_time AS [最后执行时间]

        , CAST(qs.min_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最小消耗秒数]

        , CAST(qs.max_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最大消耗秒数]

        , CAST(qs.total_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [总消耗秒数]

        , (qs.execution_count) AS [总执行次数]

        , creation_time AS [编译计划的时间]

        , CAST(qs.last_worker_time / 1000000.0 AS DECIMAL(28, 2)) AS [最后完成占用CPU秒数]

        , qp.query_plan

    from sys.dm_exec_query_stats qs

        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st

        CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp

WHERE qs.last_execution_time>DATEADD(n,-30,GETDATE())

ORDER BY qs.last_worker_time DESC
--执行最慢的20条SQL语句
SELECT TOP 20 (total_elapsed_time / execution_count) / 1000 N'平均时间ms',
       total_elapsed_time / 1000 N'总花费时间ms',
       total_worker_time / 1000 N'所用的CPU总时间ms',
       total_physical_reads N'物理读取总次数',
       total_logical_reads / execution_count N'每次逻辑读次数',
       total_logical_reads N'逻辑读取总次数',
       total_logical_writes N'逻辑写入总次数',
       execution_count N'执行次数',
       SUBSTRING(
           st.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(st.text)
                        ELSE qs.statement_end_offset
                   END
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       ) N'执行语句',
       creation_time N'语句编译时间',
       last_execution_time         N'上次执行时间'
FROM   sys.dm_exec_query_stats  AS qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE  SUBSTRING(
           st.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(st.text)
                        ELSE qs.statement_end_offset
                   END
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       ) NOT LIKE '?tch%'
ORDER BY
       total_elapsed_time / execution_count DESC;
--总耗CPU最多的前个SQL:
SELECT TOP 20
       total_worker_time / 1000           AS [总消耗CPU 时间(ms)],
       execution_count [运行次数],
       qs.total_worker_time / qs.execution_count / 1000 AS 
       [平均消耗CPU 时间(ms)],
       last_execution_time                AS [最后一次执行时间],
       max_worker_time / 1000             AS [最大执行时间(ms)],
       SUBSTRING(
           qt.text,
           qs.statement_start_offset / 2 + 1,
           (
               CASE 
                    WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text)
                    ELSE qs.statement_end_offset
               END -qs.statement_start_offset
           ) / 2 + 1
       )                                  AS [使用CPU的语法],
       qt.text [完整语法],
       qt.dbid,
       dbname = DB_NAME(qt.dbid),
       qt.objectid,
       OBJECT_NAME(qt.objectid, qt.dbid)     ObjectName
FROM   sys.dm_exec_query_stats qs WITH (NOLOCK)
                                       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS 
       qt
WHERE  execution_count > 1
ORDER BY
       total_worker_time DESC
--平均耗CPU最多的前个SQL:
SELECT TOP 20
       total_worker_time / 1000           AS [总消耗CPU 时间(ms)],
       execution_count [运行次数],
       qs.total_worker_time / qs.execution_count / 1000 AS 
       [平均消耗CPU 时间(ms)],
       last_execution_time                AS [最后一次执行时间],
       min_worker_time / 1000             AS [最小执行时间(ms)],
       max_worker_time / 1000             AS [最大执行时间(ms)],
       SUBSTRING(
           qt.text,
           qs.statement_start_offset / 2 + 1,
           (
               CASE 
                    WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text)
                    ELSE qs.statement_end_offset
               END -qs.statement_start_offset
           ) / 2 + 1
       )                                  AS [使用CPU的语法],
       qt.text [完整语法],
       qt.dbid,
       dbname = DB_NAME(qt.dbid),
       qt.objectid,
       OBJECT_NAME(qt.objectid, qt.dbid)     ObjectName
FROM   sys.dm_exec_query_stats qs WITH (NOLOCK)
                                       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS 
       qt
WHERE  execution_count > 1
ORDER BY
       (qs.total_worker_time / qs.execution_count / 1000) DESC

免责声明:文章转载自《sqlserver 性能调优脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇画小范围高精度的地形图(SRTM和ASTERDEM)Jmeter 循环控制器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

定时器中断---那些年我们一起玩mini2440(arm9)裸机

(时钟体系)http://blog.sina.com.cn/s/blog_815420370101ni84.html 时钟概念: ★时钟脉冲:一个按一定电压幅度,一定时间间隔连续发出的脉冲信号;   ★时钟频率:在单位时间(如:1秒)内产生的时钟秒冲数; 时钟的作用: 时钟信号是时序逻辑的基础,它用于决定逻辑单元中的状态何时更新。数字芯片中众多的晶体管都工...

TCP接收方对于重叠报文的处理

一、接受方有效负载的判断 在rfc793中说明了对于判断接收到的报文是否有负载的判断在Page 24和Page 25之间,其中的原文说明为  A segment is judged to occupy a portion of valid receive sequence   space if       RCV.NXT =< SEG.SEQ <...

linux 系统⽇常管理--运维必备

【监控系统的状态】 1. w 查看当前系统的负载  相信所有的linux管理员最常⽤的命令就是这个’w’ 了,该命令显⽰的信息还是蛮丰富 的。第⼀⾏从左⾯开始显⽰的信息依次为:时间,系统运⾏时间,登录⽤户数,平均 负载。第⼆⾏开始以及下⾯所有的⾏,告诉我们的信息是,当前登录的都有哪些⽤ 户,以及他们是从哪⾥登录的等等。其实,在这些信息当中,笔者认为我们...

配置IIS应用程序池

IIS 6的核心在于工作进程隔离模式,而应用程序池则是定义工作进程如何进行工作,因此,可以说应用程序池是整个IIS 6的核心。 和IIS 5中只能使用单个应用程序池不同,工作在工作进程隔离模式的IIS 6可以创建多个应用程序池,不同的应用程序池之间是完全隔离的,某个应用程序池停止服务时不会影响到其他应用程序池。 在使用应用程序池之前,你应该确定你所需要的应...

kafka入门

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行“随机读写”的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一、入门 1、简介 Kafka is a distributed,partitioned,rep...

深入理解“CPU 使用率”

回顾 CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示 案例: 最常用什么指标来描述系统的 CPU 性能? 回答 CPU 使用率,而不是平均负载,CPU 上下文切换 CPU 使用率 前言 前面说过,Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,在通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的...