Qual é o tipo de espera PAGEIOLATCH_SH no SQL Server?

96

Tenho uma consulta que está demorando muito no meio de uma transação. Quando consigo o fim wait_typedo processo, é PAGEIOLATCH_SH.

O que esse tipo de espera significa e como isso pode ser resolvido?

Ryan
fonte

Respostas:

116

Da documentação da Microsoft :

PAGEIOLATCH_SH

Ocorre quando uma tarefa está esperando em uma trava por um buffer que está em uma I/Osolicitação. A solicitação de trava está no modo Compartilhado. Esperas longas podem indicar problemas com o subsistema de disco.

Na prática, isso quase sempre acontece devido a grandes varreduras em grandes tabelas. Quase nunca acontece em consultas que usam índices de forma eficiente.

Se sua consulta for assim:

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

, verifique se você tem um índice composto ativado (col1, col_primary_key).

Se você não tiver um, precisará de um completo INDEX SCANse o PRIMARY KEYfor escolhido ou de um SORTse um índice col1for escolhido.

Ambos são I/Ooperações que consomem muito disco em grandes tabelas.

Quassnoi
fonte
É uma consulta muito simples. Selecione * de <tabela> onde <col1> = <valor> ordenar por <PrimaryKey>. Também temos um índice apenas em col1 e tentamos reconstruí-lo.
Ryan,
Você pode sugerir alguns recursos para aprender a compreensão que você tem do que é intensivo em disco, o que requer uma varredura de índice completa, o que requer uma classificação, etc.
Greg B
1
@GregB: se você já tem um conhecimento básico de SQL, pode ler os livros de Joe Celko (todos eles, mas especialmente SQL for Smartiese Thinking in Sets) e meu blog, é claro :)
Quassnoi
3
Isso indicou um erro em nosso subsistema de disco. Um disco RAID falhou sem acionar o sistema de monitoramento. A verificação dos logs de eventos descobriu que a SMART realmente marcou uma unidade como ruim.
Gomibushi de
7

PAGEIOLATCH_SH O tipo de espera geralmente surge como resultado de um índice fragmentado ou não otimizado.

Muitas vezes, os motivos para o PAGEIOLATCH_SHtipo de espera excessiva são:

  • O subsistema de E / S tem um problema ou está configurado incorretamente
  • Subsistema de I / O sobrecarregado por outros processos que estão produzindo a alta atividade de I / O
  • Gerenciamento de índice ruim
  • Equívoco de unidade lógica ou física
  • Problemas / latência de rede
  • Pressão de memória
  • Espelhamento Síncrono e AlwaysOn AG

Para tentar resolver o PAGEIOLATCH_SHtipo de espera alta , você pode verificar:

  • SQL Server, consultas e índices, já que muitas vezes isso pode ser encontrado como a causa raiz dos PAGEIOLATCH_SHtipos de espera excessivos
  • Para pressão de memória antes de pular para qualquer solução de problemas de subsistema de E / S

Sempre tenha em mente que no caso de espelhamento de alta segurança ou disponibilidade de confirmação síncrona no AlwaysOn AG, PAGEIOLATCH_SHpode-se esperar aumento / excessivo .

Você pode encontrar mais detalhes sobre este tópico no artigo Manipulando tipos de espera PAGEIOLATCH_SH excessivos do SQL Server

G.Hunt
fonte