什么是SQL Server中的PAGEIOLATCH_SH等待类型?

时间:2009-03-06 22:10:22

标签: sql-server tsql optimization

我的查询在交易过程中需要很长时间。当我获得该进程的wait_type时,它是PAGEIOLATCH_SH

这种等待类型是什么意思,如何解决?

2 个答案:

答案 0 :(得分:111)

来自MSDN

  

PAGEIOLATCH_SH

     

当任务正在等待I/O请求中的缓冲区的锁存器时发生。锁存请求处于共享模式。长时间等待可能表示磁盘子系统出现问题。

在实践中,这几乎总是由于对大桌子的大扫描而发生。在有效使用索引的查询中几乎不会发生这种情况。

如果您的查询是这样的:

Select * from <table> where <col1> = <value> order by <PrimaryKey>

,检查(col1, col_primary_key)上是否有复合索引。

如果您没有,那么如果选择了INDEX SCAN,则需要一个完整的PRIMARY KEY,如果SORT上有索引,则需要一个col1被选中。

它们都是非常磁盘I/O消耗大型表的操作。

答案 1 :(得分:6)

PAGEIOLATCH_SH等待类型通常是由于索引碎片化或未优化而导致的。

过多PAGEIOLATCH_SH等待类型的原因通常是:

  • I / O子系统出现问题或配置错误
  • 由产生高I / O活动的其他进程重载I / O子系统
  • 错误的索引管理
  • 逻辑或物理驱动器误解
  • 网络问题/延迟
  • 记忆压力
  • 同步镜像和AlwaysOn AG

为了尝试解决具有高PAGEIOLATCH_SH等待类型的问题,您可以检查:

  • SQL Server,查询和索引,因为这可能是导致PAGEIOLATCH_SH等待类型过多的根本原因
  • 在进入任何I / O子系统故障排除之前的内存压力

始终牢记在AlwaysOn AG中具有高安全性镜像或同步提交可用性的情况下,可以预期增加/过多PAGEIOLATCH_SH

您可以在文章Handling excessive SQL Server PAGEIOLATCH_SH wait types

中找到有关此主题的更多详细信息