我的查询在交易过程中需要很长时间。当我获得该进程的wait_type
时,它是PAGEIOLATCH_SH
。
这种等待类型是什么意思,如何解决?
答案 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
等待类型的原因通常是:
为了尝试解决具有高PAGEIOLATCH_SH
等待类型的问题,您可以检查:
PAGEIOLATCH_SH
等待类型过多的根本原因始终牢记在AlwaysOn AG中具有高安全性镜像或同步提交可用性的情况下,可以预期增加/过多PAGEIOLATCH_SH
。
您可以在文章Handling excessive SQL Server PAGEIOLATCH_SH wait types
中找到有关此主题的更多详细信息