Wait--常见的等待类型
--==================================================================================
--SLEEP_BPOOL_FLUSH
MSDN上如是说:当检查点为了避免磁盘子系统泛滥而中止新 I/O 的发布时出现。
场景:
在做以下操作时
1. 在修改数据库属性,如修改还原恢复模式简单为完整,长时间不能运行完毕
2. 还原数据库时,消息提示100% 但是在运行
经过调查,发现等待为SLEEP_BPOOL_FLUSH,进一步调查,发现该数据库上及其容易产生脏页(修改1W条记录可能会照成2W的脏页)
解决办法:
1. 将数据量较大的表和索引拆分(或分区)或归档历史数据
2. 建立合适索引或修改索引字段顺序
--==================================================================================
--LCK_M_XX
由于资源被加锁而导致其线程因锁不兼容造成阻塞
造成的原因
1>不合理的事务隔离级别
2>过大的事务长期占有某些资源
3>执行效率不高的语句
解决方案
1>设置合理的事务隔离级别
2>使用乐观并发
3>读写分离
4>优化DML语句,建立合理的索引
5>避免使用不合理的锁提示
6>查找造成阻塞的其他原因
--==================================================================================
--PAGELATCH_XX
等待访问内存中的页面
PAGELATCH_XX与PAGEIOLATCH_XX完全不同
解决TempDB上的PAGELATCH_XX方案
1>启用TF 1118 来阻止将新创建的表放入混合区
2>增加文件个数来减少对系统分配页的争抢
3>不要显示Drop临时表来减少非非配页的争抢(存储过程中的临时表可以被重用)
解决页拆分引起的问题
1>GUID类型的索引键造成的页拆分,设置合适的填充因子或修改GUID键
2>数据变化过大引起的页拆分,将变化较大(长度)且变化频率较高的列拆分到其他表
3>控制索引键的长度
解决高并发插入自增表导致的插入热点
1>使用随机或组合键来将数据分散到表中各个部分而不是尾部
2>修改架构,将数据插入到多个表中或多个数据库中
--==================================================================================
--WRITELOG
等待将日志快flush到日志文件
可能原因
1>导致大量事务日志的操作产生,如果索引维护
2>事务并发度较高
3>IO系统瓶颈
4>频繁页拆分
解决方案
1>查看LOGBUFFER等待,是否存在对日志缓冲区的争抢
2>查看日志所在磁盘是否存在队列
3>查看事务平均大小,是否存在小事务频繁操作,将小事务合并为大事务
4>删除无用索引
5>业务拆分,由多个数据库来承担压力
6>提高日志磁盘的性能
7>修改索引,减少页分裂
--==================================================================================
--ASYNC_NETWORK_IO
当返回查询结果给客户端时,客户端未能及时处理
可能原因
1>网络不佳导致传输速率低
2>客户端程序处理数据存在问题
3>服务端返回过多数据
解决方案
1>修改客户端程序,避免出现RBAR(Row by agonizing Row)
2>避免一次返回给客户端过多数据,如果分页等
3>检查网络路由
4>检查网络硬件
--==================================================================================
--PAGEIOLATCH_XX
常见的有PAGEIOLATCH_SH和PAGEIOLATCH_EX,在数据页从磁盘读取到内存中发生等待,SH表示数据页用于读取,EX表示数据页用于修改
可能导致的原因
1>IO系统的确存在问题,存在IO瓶颈
2>执行计划不佳导致扫描
3>内存存在压力导致页在内存中的存活时间过短
解决方案:
1>检查执行计划
2>检查是否存在内存压力
3>检查是否存在其他应用导致IO压力
4>检查存储是否满足需求
--==================================================================================
--CXPACKET
在执行并行查询计划时,由于各并行线程之间任务分配不均匀或某个线程被阻塞,导致CXPACKET 值增加
导致CXPACKET等待高的原因有很多,不能盲目地修改 MAXDOP的值或修改实例级别的最大并发度
可能原因有:
1>统计过期导致生成低效的执行计划
2>缺乏索引导致表扫描
3>中间结果集无法预估结果集行数,导致执行计划低效
4>某个线程因其他资源被阻塞
解决方案
1>检查执行计划是否高效
2>修改语句的并发度
3>修改实例级别的最大并发度
补充:
建议将MAXDOP的值设置为小于逻辑CPU的数,以避免单个查询阻塞所有请求
Wait--常见的等待类型的更多相关文章
- 资源等待类型sys.dm_os_wait_stats
动态管理视图 sys.dm_os_wait_stats 返回执行的线程所遇到的所有等待的相关信息.可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题. 列名 数据类型 说 ...
- Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)
Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...
- [转载]sql server 等待类型
下表列出各任务所遇到的等待类型. 等待类型 说明 ASYNC_DISKPOOL_LOCK 当尝试同步并行的线程(执行创建或初始化文件等任务)时出现. ASYNC_IO_COMPLETION 当某任务正 ...
- sql server 各种等待类型-转
等待的类型 资源等待 当某个工作线程请求访问某个不可用的资源(因为该资源正在由其他某个工作线程使用,或者该资源尚不可用)时,便会发生资源等待.资源等待的示例包括锁等待.闩锁等待.网络等待以及磁盘 I/ ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...
- [AlwaysOn Availability Groups]AlwaysOn等待类型
AlwaysOn等待类型 当排查AlwaysOn延迟,等待统计信息可以在DMV中查看累计的AlwaysOn等待类型. 查看AlwaysOn等待类型 SELECT * FROM sys.dm_os_wa ...
- SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex
当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...
- SQL Server中与IO相关的等待类型:IO_COMPLETION和PAGEIOLATCH_*
一个大的SQL语句操作,执行计划中包含了一个merge join操作,观察到SQL长时间处于IO_COMPLETION等待状态,如果是读取相关的表的数据,服务器应该全力为其服务,但是服务器的物理IO又 ...
- sql server 性能调优之 资源等待内存瓶颈的三种等待类型
一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),SOS_RESERVEDMEMBLOCKLIST(0x007B),RESO ...
- 游戏开发中IIS常见支持MIME类型文件解析
游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...
随机推荐
- Halcon算子之shape_trans,用于变换区域的形状
函数原型:shape_trans(Region : RegionTrans : Type : ) *shape_trans*仍然是区域,smallest_rectangle1可以获得四个角的坐标 函数 ...
- winform中读取App.config中数据连接字符串
1.首先要在工程引用中导入System.Configuration.dll文件的引用. 2.通过System.Configuration.ConfigurationManager.Connection ...
- 【转】RocketMQ事务消费和顺序消费详解
RocketMQ事务消费和顺序消费详解 转载说明:该文章纯转载,若有侵权或给原作者造成不便望告知,仅供学习参考. 一.RocketMq有3中消息类型 1.普通消费 2. 顺序消费 3.事务消费 顺序消 ...
- jq 遍历 each方法
1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function ...
- [iOS]swift之UITableView添加通过xib创建的headerView坑爹问题
情景是这样的,我UITableView添加了一个HeaderView,这个HeaderView是通过xib创建,是UIView.出来的结果却出乎意料,UITableView的Cell最顶部的几个被He ...
- 深入探究jvm之GC的参数调优
在上一篇博客记录了GC的算法及种类,这篇博客主要记录一下GC的参数如何调整以提高jvm的性能. 一.堆的回顾: 堆的内存空间总体分为新生代和老年代,老年代存放的老年对象,新构造的对象分配在eden区中 ...
- shell编程——sed用法
一.sed格式: sed 参数 '正则表达式' 文件名 演示文件的内容: [root@localhost ~]# cat test.sh #!/bin/bash 第一行 12345! 第二行 2345 ...
- Python OrderedDict使用
一.最近最少使用实现: import collections class LRUDict(object): ''' 最近最少使用队列实现,最近使用的键值放后面 ''' def __init__(sel ...
- Android基础之sqlite 数据库简单操作
尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper { private static final ...
- vuejs 2.0 键盘事件
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...