在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询。

这篇文章我们看下从计划缓存里列出执行状态。

  1. /*****************************************************************************************
  2. List heavy query based on CPU/IO. Change the order by clause appropriately
  3. ******************************************************************************************/
  4. SELECT TOP 20
  5. DB_NAME(qt.dbid) AS DatabaseName
  6. ,DATEDIFF(MI,creation_time,GETDATE()) AS [Age of the Plan(Minutes)]
  7. ,last_execution_time AS [Last Execution Time]
  8. ,qs.execution_count AS [Total Execution Count]
  9. ,CAST((qs.total_elapsed_time) / 1000000.0 AS DECIMAL(28,2)) [Total Elapsed Time(s)]
  10. ,CAST((qs.total_elapsed_time ) / 1000000.0/ qs.execution_count AS DECIMAL(28, 2)) AS [Average Execution time(s)]
  11. ,CAST((qs.total_worker_time) / 1000000.0 AS DECIMAL(28,2)) AS [Total CPU time (s)]
  12. ,CAST(qs.total_worker_time * 100.0 / qs.total_elapsed_time AS DECIMAL(28,2)) AS [% CPU]
  13. ,CAST((qs.total_elapsed_time - qs.total_worker_time)* 100.0 /qs.total_elapsed_time AS DECIMAL(28, 2)) AS [% Waiting]
  14. ,CAST((qs.total_worker_time) / 1000000.0/ qs.execution_count AS DECIMAL(28, 2)) AS [CPU time average (s)]
  15. ,CAST((qs.total_physical_reads) / qs.execution_count AS DECIMAL(28, 2)) AS [Avg Physical Read]
  16. ,CAST((qs.total_logical_reads) / qs.execution_count AS DECIMAL(28, 2)) AS [Avg Logical Reads]
  17. ,CAST((qs.total_logical_writes) / qs.execution_count AS DECIMAL(28, 2)) AS [Avg Logical Writes]
  18. ,max_physical_reads
  19. ,max_logical_reads
  20. ,max_logical_writes
  21. , SUBSTRING (qt.TEXT,(qs.statement_start_offset/2) + 1,((CASE WHEN qs.statement_end_offset = -1
  22. THEN LEN(CONVERT(NVARCHAR(MAX), qt.TEXT)) * 2
  23. ELSE qs.statement_end_offset
  24. END - qs.statement_start_offset)/2) + 1) AS [Individual Query]
  25. , qt.TEXT AS [Batch Statement]
  26. , qp.query_plan
  27. FROM SYS.DM_EXEC_QUERY_STATS qs
  28. CROSS APPLY SYS.DM_EXEC_SQL_TEXT(qs.sql_handle) AS qt
  29. CROSS APPLY SYS.DM_EXEC_QUERY_PLAN(qs.plan_handle) qp
  30. WHERE qs.total_elapsed_time > 0
  31. ORDER BY
  32. [Total CPU time (s)]
  33. --[Avg Physical Read]
  34. --[Avg Logical Reads]
  35. --[Avg Logical Writes]
  36. --[Total Elapsed Time(s)]
  37. --[Total Execution Count]
  38. DESC

输出结果的每列说明介绍如下:

  • DatabaseName 执行计划的数据库环境(数据库名)。
  • Age of the Plan(Minutes) 计划缓存里计划的生存期,单位为分钟。
  • Last Execution Time 这个计划的上次执行日期和时间。
  • Total Execution Count   自上次编译后,总执行次数;在执行计划生存期内[Age of the Plan(Minutes)],总执行次数(自上次编译后)。
  • Total Elapsed Time(s)   执行这个计划总执行次数后[Total Execution Count]的总占用时间,单位为秒。
  • Average Execution time(s) 这个计划每次执行的平均时间,单位为秒。
  • Total CPU time (s)  执行这个计划总执行次数后[Total Execution Count]的总CPU时间,单位为秒。
  • % CPU 与Total Elapsed Time(s)相比,CPU占用时间比。
  • % Waiting  与Total Elapsed Time(s)相比,等待资源占用时间比。
  • CPU time average (s) 每次执行的平均CPU时间,单位为秒。
  • Avg Physical Read 每次执行的平均物理读数。
  • Avg Logical Reads 每次执行的平均逻辑读数。
  • Avg Logical Writes 每次执行的平均逻辑写数。
  • max_physical_reads 每次执行的时候,出新最大物理读数。
  • max_logical_reads 每次执行的时候,出新最大逻辑读数。
  • max_logical_writes 每次执行的时候,出新最大逻辑写数。
  • Individual Query  批处理语句的部分信息。
  • Batch Statement  批处理查询。
  • query_plan XML格式的执行计划,点击后我们可以看图示执行计划。

一般我们可以分析前5条记录(通过修改排序规则)的具体语句信息。大多数情况,我们会发现问题出现在临时表的滥用,distinct语句,游标,不合适的表连接条件,不合适的索引等等。其他经常发生的问题是,存储过程对数据库的大量调用(CPU消耗和执行时间都很小)。这个需要和开发人员反馈,修改下具体的实现方式。如果数据经常被调用,可以在程序里使用缓存方法避免与服务器的多次交互。有些对数据库的调用只是检查结果数据是否有改变。有些对数据库的调用是为检查数据库表里是否有新记录,且必须马上处理的。为了完成这些操作,程序会在1秒内多次查询表来找出未处理的记录。这个可以通过程序的异步调用来往表里插入数据来解决,或可以使用.net框架里的sqlDependency来解决。(sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的。)

参考文章:

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/09/26/sql-server-part-4-approaching-database-server-performance-issue-/

初涉SQL Server性能问题(4/4):列出最耗资源的会话的更多相关文章

  1. 初涉SQL Server性能问题(3/4):列出阻塞的会话

    在 初涉SQL Server性能问题(2/4)里,我们讨论了列出等待资源或正运行的会话脚本.这篇文章我们会看看如何列出包含具体信息的话阻塞会话清单. /************************ ...

  2. 初涉SQL Server性能问题(2/4):列出等待资源的会话

    在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结 ...

  3. 初涉SQL Server性能问题(1/4):服务器概况

    当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多.可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重.不 ...

  4. SQL Server 性能优化之——系统化方法提高性能

    SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...

  5. SQL Server 性能优化详解

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  6. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  7. SQL Server 性能优化(一)——简介

    原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投 ...

  8. SQL Server性能优化与管理的艺术 附件下载地址

    首先感谢读者们对鄙人的支持,购买了<SQL Server性能优化与管理的艺术>,由于之前出版社的一些疏忽,附件没有上传成功,再次本人深表歉意. 请需要下载附件的读者从下面链接下载,谢谢: ...

  9. 影响Sql server性能的因素

    目前本人在看<SQL Server性能调优实战> ,以下内容是本人看书笔记 数据库性能取决于各方面综合因素: 硬件,操作系统,软件 硬件:内存,CPU,磁盘 当服务器的物理内存不足时,会产 ...

随机推荐

  1. CCNA实验2.VLAN

    一. 二.配置主VTP上的信息 sw2上配置为domain server,sw1上配置为domain client,sw2上增加vlan并命名和添加描述 conf t vtp domain corp ...

  2. 2014中国软件开发者调查(二):Java、.NET、Web、云计算特点

    继上周五放出第一篇中国软件开发者调查报告后,很多初学者和开发者翘首以盼第二篇.第三篇报告--希望这些调查报告能够给他们带来指导,解决他们的疑惑.确定他们的学习和使用信心.经过笔者在周末的努力,内容更加 ...

  3. Apple individual program 加入之后的玩法 官方资源

    Apple individual program 加入之后的玩法  官方资源   0. 开发资源文档 0.1 开发文档: https://developer.apple.com/support/res ...

  4. Android开发(二十六)——Application

    application package com.lgaoxiao.application; import java.util.LinkedList; import java.util.List; im ...

  5. Linux 求文件交集 差集等

    使用comm命令 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d a FILE2内容如下: c d a c 基本上有两个方法,一个是comm命令,一个是g ...

  6. How To Create a Personal Balance Sheet

    Calculating your personal net worth is the best way to know exactly what your starting point is, in ...

  7. 用Zim替代org-mode?

    三年前我玩过Zim,当时还写了一篇<Zim - 普通人的Org-mode>,当时还说我还是会坚持使用emacs org-mode.但最近我又在考虑是不是回头用Zim来写博客文章.整理知识库 ...

  8. JS回到顶部代码小记

    HTML: <div id="goTop"> <a href="#top"><img src="~/Content/th ...

  9. openssl 学习之从证书中提取RSA公钥N 和 E

    原文链接: http://blog.csdn.net/kkxgx/article/details/19850509 通常数字证书包含很多信息,其中N和E值即我们称为的公钥.如何从PEM 或者DER格式 ...

  10. Microsoft Office Excel 不能访问文件 的解决办法

    Microsoft Office Excel 不能访问文件"a.xls". 可能的原因有: ? 文件名称或路径不存在.  ? 文件正被其他程序使用.  ? 您正要保存的工作簿与当前 ...