Tengo una consulta que está demorando mucho en medio de una transacción. Cuando obtengo elwait_type
del proceso, lo es PAGEIOLATCH_SH
.
¿Qué significa este tipo de espera y cómo se puede resolver?
fuente
Tengo una consulta que está demorando mucho en medio de una transacción. Cuando obtengo elwait_type
del proceso, lo es PAGEIOLATCH_SH
.
¿Qué significa este tipo de espera y cómo se puede resolver?
De la documentación de Microsoft :
PAGEIOLATCH_SH
Ocurre cuando una tarea está esperando en un pestillo para un búfer que está en una
I/O
solicitud. La solicitud de pestillo está en modo compartido. Las esperas largas pueden indicar problemas con el subsistema de disco.
En la práctica, esto casi siempre sucede debido a grandes escaneos en tablas grandes. Casi nunca ocurre en consultas que usan índices de manera eficiente.
Si su consulta es así:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
, compruebe que tiene un índice compuesto activado (col1, col_primary_key)
.
Si no tiene uno, necesitará un completo INDEX SCAN
si PRIMARY KEY
se elige, o un SORT
si col1
se elige un índice .
Ambos son I/O
operaciones que consumen mucho disco en tablas grandes.
SQL for Smarties
yThinking in Sets
) y mi blog, por supuesto :)PAGEIOLATCH_SH
el tipo de espera suele aparecer como resultado de un índice fragmentado o no optimizado.A menudo, las razones del
PAGEIOLATCH_SH
tipo de espera excesiva son:Para intentar resolver el
PAGEIOLATCH_SH
tipo de espera alta , puede verificar:PAGEIOLATCH_SH
tipos de espera excesivosSiempre tenga en cuenta que en caso de alta seguridad Mirroring o disponibilidad de compromiso síncrono en AlwaysOn AG,
PAGEIOLATCH_SH
se puede esperar un aumento / exceso .Puede encontrar más detalles sobre este tema en el artículo Manejo de tipos de espera excesivos de SQL Server PAGEIOLATCH_SH
fuente