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_SHOcurre cuando una tarea está esperando en un pestillo para un búfer que está en una
I/Osolicitud. 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 SCANsi PRIMARY KEYse elige, o un SORTsi col1se elige un índice .
Ambos son I/Ooperaciones que consumen mucho disco en tablas grandes.
SQL for SmartiesyThinking in Sets) y mi blog, por supuesto :)PAGEIOLATCH_SHel tipo de espera suele aparecer como resultado de un índice fragmentado o no optimizado.A menudo, las razones del
PAGEIOLATCH_SHtipo de espera excesiva son:Para intentar resolver el
PAGEIOLATCH_SHtipo de espera alta , puede verificar:PAGEIOLATCH_SHtipos de espera excesivosSiempre tenga en cuenta que en caso de alta seguridad Mirroring o disponibilidad de compromiso síncrono en AlwaysOn AG,
PAGEIOLATCH_SHse 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