什么是SQL Server中的PAGEIOLATCH_SH等待types?
我有一个查询,在交易中需要很长时间。 当我得到进程的wait_type
时,它是PAGEIOLATCH_SH
。
这种等待types意味着什么?如何解决?
来自MSDN :
PAGEIOLATCH_SH
在任务正在等待
I/O
请求中的缓冲区的锁存器时发生。 锁存请求处于共享模式。 长时间等待可能表明磁盘子系统存在问题。
实际上,这通常是由于在大桌子上进行大扫描而发生的。 在有效使用索引的查询中几乎不会发生。
如果你的查询是这样的:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
,检查你在(col1, col_primary_key)
上有一个复合索引。
如果您没有一个,那么如果select了PRIMARY KEY
,则需要完整的INDEX SCAN
如果select了col1
上的索引,则需要SORT
。
它们都是大型磁盘上的磁盘I/O
消耗操作。
PAGEIOLATCH_SH
等待types通常是由于分段或未优化的索引而产生的。
过多PAGEIOLATCH_SH
等待types的原因常常是:
- I / O子系统有问题或configuration错误
- 其他正在生成高I / O活动的进程重载的I / O子系统
- 糟糕的索引pipe理
- 逻辑或物理驱动器的误解
- networking问题/延迟
- 内存压力
- 同步镜像和AlwaysOn AG
为了尝试解决高PAGEIOLATCH_SH
等待types,您可以检查:
- SQL Server,查询和索引,因为经常可以发现这是导致过多
PAGEIOLATCH_SH
等待types的根本原因 - 跳到任何I / O子系统故障排除之前的内存压力
请始终记住,在AlwaysOn AG中安全性较高的情况下镜像或同步提交可用性时,可能会增加/超出PAGEIOLATCH_SH
。
您可以在处理过多的SQL Server PAGEIOLATCH_SH等待types的文章中find有关此主题的更多详细信息