Tenho uma consulta que está demorando muito no meio de uma transação. Quando consigo o fim wait_type
do processo, é PAGEIOLATCH_SH
.
O que esse tipo de espera significa e como isso pode ser resolvido?
fonte
Tenho uma consulta que está demorando muito no meio de uma transação. Quando consigo o fim wait_type
do processo, é PAGEIOLATCH_SH
.
O que esse tipo de espera significa e como isso pode ser resolvido?
Da documentação da Microsoft :
PAGEIOLATCH_SH
Ocorre quando uma tarefa está esperando em uma trava por um buffer que está em uma
I/O
solicitaçã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 SCAN
se o PRIMARY KEY
for escolhido ou de um SORT
se um índice col1
for escolhido.
Ambos são I/O
operações que consomem muito disco em grandes tabelas.
SQL for Smarties
eThinking in Sets
) e meu blog, é claro :)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_SH
tipo de espera excessiva são:Para tentar resolver o
PAGEIOLATCH_SH
tipo de espera alta , você pode verificar:PAGEIOLATCH_SH
tipos de espera excessivosSempre tenha em mente que no caso de espelhamento de alta segurança ou disponibilidade de confirmação síncrona no AlwaysOn AG,
PAGEIOLATCH_SH
pode-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
fonte