根据WaitType诊断故障
在查询执行时,等待次数和等待时间在一定程度上指示查询的瓶颈,甚至非常有助于对系统进行诊断。偶尔一次的异常等待,不足以表明系统存在瓶颈,但是,SQL Server实例经常出现特定的等待类型,并且等待时间趋于增加,这就说明,系统存在压力,或内存,或IO等,根据WaitType对系统进行监控和诊断,还能对查询进行性能调优,例如,Lock等待表明查询存在数据竞争,PageIOLatch等待表明IO响应缓慢,PageLatch等待表明文件的布局需要改进等。
一,资源信号(RESOURCE SEMAPHORE)
1,RESOURCE_SEMAPHORE 等待类型表示一个Workder等待SQL Server给予其申请的内存,以便执行Hash和Sort操作。
Used to indicate a worker is waiting to be allowed to perform an operation requiring "query memory" such as hashes and sorts .
High wait times indicate too many queries are running concurrently that require query memory. Operations requiring query memory are hashes and sorts. Use DMVs such as dm_exec_query_resource_semaphores and dm_exec_query_memory_grants
当出现 RESOURCE_SEMAPHORE 等待时,这说明查询语句请求的内存没有得到满足,就是说,该查询语句在执行Task前,需要一定量的内存资源,如果SQL Server当前的内存不足,不能分配查询语句请求的内存,将导致查询语句处于等待内存资源的状态。在SQL Server存储引擎中,排序(Sort)操作和哈希(Hash)操作是非常消耗内存资源的两个操作,优化相应的查询语句,以减少这两个操作,可以缓解SQL Server的内存压力,但在SQL Server实例中,经常出现RESOURCE_SEMAPHORE 等待,这说明SQL Server存在内存压力。
在数据库中有一个选项,Min Memory Per Query,该选项表示SQL Server为每个查询分配的最小内存,这意味着,当一个查询需要额外的内存资源,该查询获取的内存大小,很大部分是由该选项决定的,只有为每个查询授予一定的内存之后,该查询语句才会真正开始执行。
2,发送RESOURCE SEMAPHORE用于授予请求内存(Requested Memory)
当SQL Server实例收到用户的查询请求时,SQL Server优化器首先创建编译计划(Complied Plan),根据编译计划再创建执行计划(Execution Plan)。当SQL Server优化器创建编译计划时,它需要计算查询在执行时需要消耗的内存,用于执行查询的内存分为必需内存(Required Memory)和额外内存(Additional Memory)。必需内存是指SQL Server实例执行Sort或Hash操作时必须分配的最小内存,如果没有分配必需内存,查询请求不会执行。额外内存是查询用于存储临时的中间数据的内存,如果SQL Server没有足够的内存,查询将临时数据存储在硬盘中,这会降低查询性能。
SQL Server 要授予每个查询多少内存,查询才能真正开始执行呢?
- Step1,计算需要的内存(Needed Memory):SQL Server计算每个查询需要多少内存才能执行,这通常是必需内存和额外内存之和,当查询请求以并发方式执行时,需要的内存公式是:(RequiredMemory*DOP)+额外内存。
- Step2,计算请求的内存(Requested Memory):SQL Server检查每个查询请求需要的内存数量是否超出系统的限制,SQL Server减少额外内存的数量,以致于不会超出系统的上限,这个最终的内存数量是查询语句得以执行的请求内存。
- Step3,为查询分配请求内存:SQL Server实例发送资源信号(RESOURCE SEMAPHORE),为查询(Query)授予/分配请求的物理内存。
当资源信号发送之后,如果SQL Server实例不能被授予查询的请求内存,那么查询将处于RESOURCE_SEMAPHORE 等待状态。SQL Server维护一个先入先出( first-come-first-served)的等待队列,当新的查询处于RESOURCE_SEMAPHORE 等待状态,SQL Server将该查询放入队列的末尾。一旦SQL Server实例找到足够的空闲内存,那么SQL Server取出RESOURCE_SEMAPHORE 等待队列顶端的第一个查询,立即授予其请求的内存;该查询获得请求内存之后,开始执行查询任务;如果SQL Server实例长时间有查询处于RESOURCE_SEMAPHORE等待状态,说明SQL Server 面临内存压力。
二,调度队列信号
DISPATCHER_QUEUE_SEMAPHORE,发生当一个进程(Thread)等待处理更多的Work时,该等待是说,一个Thread处于空闲状态,等待调度去工作。如果等待时间增加,说明调度器(Dispatcher)非常空闲;该WaitType不会成为竞争资源,而将其他事务阻塞,在做Wait统计分析,可以过滤掉。
三,异步网络IO
ASYNC_NETWORK_IO等待类型,是指SQL Server 产生的结果集需要经过网络(Network)传递到客户端(Client),网络不能及时将结果集传输到Client,导致结果集仍然驻留在SQL Server的会话(Session)中,这意味着,ASYNC_NETWORK_IO 等待状态出现在SQL Server已经把数据准备好,但是网络发送速度跟不上,导致SQLServer返回的数据集仍然驻留在Session中,出现这种等待一般不是数据库的问题,调整数据库配置不会有大的帮助,网络层的瓶颈当然是一个可能的原因,对此要考虑是否真有必要返回那么多数据?所以,检查应用程序是否有必要向SQL Server申请这么大的结果集。
四,硬盘IO相关的等待
1,PageIOLatch
当缓存在buffer pool 的data page 和disk 上数据文件里的data page 进行交互时,为了保证不会有多个用户同时 read/write 内存中的buffer(a data page in memory),需要对buffer 加上PageIOLatch。PageIOLatch 是和 IO 有关,或从disk将Data page读取到内存,或从内存将Data page写入到disk。
PageIOLatch主要分为两大类:PageIOLatch_SH和PageIOLatch_EX
PageIOLatch_SH:发生在将一个Data Page从Disk 读取到内存 buffer pool 中时。当用户需要访问一个Data Page,而这个Data Page不在内存中时,Sql server 需要将 Data page 从Disk 读取到内存中,这说明内存不够大,或内存紧张,导致没有将Data Page始终缓存在内存中,SQL Server 需要过多地Page Read(从Disk读取Data page到内存 buffer pool)操作。这种情况说明内存是bottleneck。
PageIOLatch_EX:发生在用户对内存中的Data page进行了修改,SQL Server需要写回Disk,意味着disk的写入速度慢。
2,PageLatch
PageLatch 是对内存中的buffer(a data page in memory)加锁,用于同步内存 buffer Pool中的Data Page数据修改操作。当一个task需要修改 buffer时,必须申请PageLatch_EX。只有得到这个Latch,才能修改buffer里的内存。
由于buffer的修改都是在memory中完成的,所以每次修改的时间都应该非常短,而PageLatch只是在修改的过程中才会短暂出现。如果出现PageLatch等待,说明大量的并发语句在修改table,而修改操作同时集中在同一个page,或者数量不多的几个page上,这些Page 称作Hot Page。出现Hot Page 是由于数据过于集中导致,将数据分布在不同的Files上,能够减少PageLatch Wait。
3,WriteLog
和Disk的写速度有关,说明任务当前正在等待将日志记录写入日志文件,出现这个等待状态,意味着Disk的写入速度是bottleneck。
参考文档:
Troubleshooting SQL Server RESOURCE_SEMAPHORE Waittype Memory Issues
Wait statistics, or please tell me where it hurts
根据WaitType诊断故障的更多相关文章
- Diagnostic Trouble Code诊断故障码
所有电子控制单元(ECU)都会根据整车厂规范要求对相关故障进行记录,并储存在NVM(也称作EEPROM)相当于平常电脑上硬盘里.除故障代码外,还会记录故障发生时相关整车情况(如供电电压,环境温度 ...
- 性能调优9:根据WaitType诊断性能
SQL Server数据库接收到查询请求,从生成计划到执行计划的过程,等待次数和等待时间在一定程度上揭示了系统性能的压力,如果资源严重不足,就会成为性能的瓶颈.因此,对等待的监控非常有助于对系统性能进 ...
- IBM服务器诊断面板
IBM服务器一般会有一个服务器操作员信息面板(诊断面板),服务器一般的硬件故障都会在诊断面板上提示,但这些提示可能只是一个大概的诊断故障,有助于系统管理员更好的维护. 一.IBM X3650 M3诊断 ...
- 业以太网:西门子PROFINET诊断功能SFC12-OB86-SFB20概览
[OB86配合SFC12在PROFINET诊断中的应用] OB86是机架故障组织块,操作系统在检测到下列PN系统故障时将调用OB86: 1.检测到PROFINET IO设备故障,故障产生和消失时分别调 ...
- CAN诊断学习
汽车CAN总线有动力总成PCAN,底盘控制CCAN,整车控制BCAN,娱乐ECAN,诊断DCAN五种. CAN诊断,即是对CAN网络中各节点,各CAN总线,网关的故障进行检查与修复. 统一诊断服务(U ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...
- IOC框架
一. IOC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...
- 转:IOC框架
CSND上看了王泽滨的博客关于IOC的,觉得说的很透彻,地址为:http://blog.csdn.net/wanghao72214/article/details/3969594 1 IoC理论的背景 ...
随机推荐
- add jars和add external jars有什么区别
原文add jars和add external jars有什么区别? add jars和add external jars有什么区别? add external jars = 增加工程外部的 ...
- Centos下关于ssh、scp与rsync设置与应用
最近应公司要求,需要对文件数据进行远程传输与备份操作,特此写了一篇文章记录下了关于ssh.scp以及rsync的应用配置全过程,可能过程太过罗嗦,但主要就是想在不遗漏每个过程的情况下对此进行阐述,希望 ...
- 前言《iOS网络高级编程:iPhone和iPad的企业应用开发》(书籍学习)
本书内容: 在客户端设备与服务器之间执行HTTP请求 管理客户端设备与服务器之间的数据负载 处理HTTP请求的错误 保护网络通信 改进网络通信的性能 执行Socket层的通信 实现推送通知 单个设备上 ...
- Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法
http://www.2cto.com/os/201312/262437.html 安装了VS2012之后,chrome在加载页面的时候会报 Resource interpreted as Scrip ...
- Google中Gson的使用解析json数据-------学习篇
之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...
- (一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10)
(一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10) 系统要求 64位 Windows 10 除了家庭版的 都支持 ~ 64位CPU CPU至少是四核心以上~ 至少 ...
- (二)Windows下Redis的主从复制
Redis拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构.目前在同一台window下安装三个r ...
- Vmware 的三种网络连接方式
VMWare提供了三种工作模式,host-only(主机模式).NAT(网络地址转换模式).bridged(桥接模式). 1.host-only(主机模式) 在某些特殊的网络调试环境中,如何要求将真实 ...
- ubuntu 更新引导命令
sudo update-grub 运行结果: Generating grub configuration file ...Warning: Setting GRUB_TIMEOUT to a non- ...
- MyBatis中多对多关系的映射和查询
先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使 ...