SQL技术内幕-13 SQL优化方法论之分析实例级别的等待

优化方法论的第一步是在实例级别上找出什么类型的等待占用了大部分的等待时间,这可以通过查询动态管理图(DMV,dynamic management view)sys.dm_os_wait_stats

运行一下查询,将返回你的系统中的等待信息,并按类型排序。

SELECT  wait_type ,
        waiting_tasks_count ,
        wait_time_ms ,
        max_wait_time_ms ,
        signal_wait_time_ms
  FROM sys.dm_os_wait_stats
  ORDER BY wait_type

这个DMV从服务器最后一次重新启动开始积累值,如果想重置他的值,可以运行一下代码

DBCC SQLPERF(‘sys.dm_os_wait_stats‘,CLEAR)  

  • DMV sys.dm_os_wait_stats包含一下属性:
        1.wait_type ,
        2.waiting_tasks_count ,   表示该类等待的数量
        3.wait_time_ms ,    以毫秒为单位的该类等待的总时间(该时间包含signal_wait_time_ms)
        4.max_wait_time_ms ,
        5.signal_wait_time_ms  它是正在等待的线程从收到信号通知到其开始运行之间的时差。从线程收集到资源可用的信号开始,到线程得到CPU时间,开始使用资源位置经历的时间。可以想到,如果这个属性的值很高,通常就表示CPU存在问题。
  • 与I/O相关的等待是最常见的等待(例如,IOLATCH等待),其中有几个原因,I/O通常是数据处理操作所涉及的最昂贵资源。而且,当查询或索引没有经过良好的设置或优化时,结果一定会造成大量的I/O。 数据库系统,不只是要关注CPU,还需要非常强健的I/O子系统。

    • 对于网络相关的等待(例如:ASYNC_NETWORK_IO),他们的值过高,则表明可能存在网络问题。
时间: 2024-10-18 00:08:03

SQL技术内幕-13 SQL优化方法论之分析实例级别的等待的相关文章

SQL技术内幕四

数据类型: sql server只接受两种数据类型 1. 普通字符 varchar char 用一个字节表示一个字符,表示英文 2.unicode   nchar nvarchar 用两个字节表示一个字符 char nchar都是固定长度的,不论其中字符的实际长度,适用于写入为主的系统,读取效率低 varchar nvarchar 是可变长度,读取速度会快但是更新会慢

SQL技术内幕三

Select 分析一个查询实例 Select empid,year(orderdate) as orderYear,count(*) as orderCount From dbo.orderInfo where custid=71 group by empid,Year(orderdate) having count(*) >1 order by empid 以上语句在sql server内的执行顺序是 from--where--group by--having --select--order

SQL技术内幕二DDL

创建数据库: if db_id('DBTest') is nullcreate database DBTest 创建表 use eb_fy_data_test---use 切换所在数据库上下文 if object_id('UserTest','u') is not null drop TABLE UserTest CREATE TABLE UserTest {} 数据完整性 1.主键约束 alter table UserTest add constraint PK_UserTest Primar

SQL技术内幕一

范式:关系模型的规范化规则. Codd提出的三个数据库范式: 1. 第一范式 第一范式要求表中的每一行都是必须是唯一的.因为关系型数据库是基于集合论的,而集合的定义中,要求每一个元素都是唯一的(在关系数据库中可以用键来区别).因此所有的关系数据库表必然是满足第一范式的. 2.第二范式 第二范式要求必须满足第一范式,其次要求非键值属性和候选键值属性之间必须满足一定的条件.即所有非键值属性都完全依赖与整个候选键值所有属性. 如何理解名词参照http://www.cnblogs.com/lumnm/a

SQL技术内幕-12 SQL优化方法论前言

我推荐的一种使用自顶向下的优化论.这种方法,首先分析实例级的等待时间,在通过一系列步骤将其不断细化,知道找出系统中导致大量等待的进程/组件.一旦找出这些令人讨厌的进程,就可以集中优化他们了,一下是这种方法论的不主要步骤: 1.分析实例级别的等待 2.关联等待和队列 3.确定方案 4.细化到数据库/文件级. 5.细化到进程级 6.优化索引/查询 SQL Server 2008引入了一个称为数据收集器(data collector)的组件,用于从多种来源收集不同的数据(性能方面的数据或者其他数据),

SQL Server技术内幕笔记合集

SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnblogs.com/lyhabc/articles/3914213.html Microsoft SQL Server 2005技术内幕:T-SQL查询笔记http://www.cnblogs.com/lyhabc/articles/3912608.html Microsoft SQL Server 2

基于oracle的sql优化方法论

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择: 1.降低目标SQL语句的资源消耗: 2.并行执行目标SQL语句: 3.平衡系统的资源消耗. "方法1:降低目标SQL语句的资源消耗"以缩短执行时间,这是最常用的SQL优化方法.这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗. 方法2:并行执行

SQL技术内幕-8 使用WITH AS提高性能简化嵌套SQL

--本文来源:http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION ALL的每个部分可能相同

笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-10 可编程对象

关于批处理 下列语句不能在同一批处理中和其他语句同时编译:CREATE DEFAULT.CREATE FUNCTION.CREATE PROCEDURE.CREATE RULE.CREATE SCHEMA.CREATE TRIGGER及CREATE VIEW.例如,以下代码包含一个IF语句,之后在同一批处理中跟着一个CREATE VIEW语句,SQL Server将会报错: IF OBJECT_ID('Sales.MyView', 'V') IS NOT NULL DROP VIEW Sales