¿Qué es el tipo de espera PAGEIOLATCH_SH en SQL Server?

96

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?

Ryan
fuente

Respuestas:

116

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/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.

Quassnoi
fuente
Es una consulta realmente simple. Seleccione * de <tabla> donde <col1> = <valor> ordenar por <PrimaryKey>. También tenemos un índice solo en col1 y hemos intentado reconstruir el índice.
Ryan
¿Puede sugerir algunos recursos para aprender a comprender qué es lo que requiere un uso intensivo del disco, qué requiere un escaneo de índice completo, qué requiere una clasificación, etc.?
Greg B
1
@GregB: si ya tiene un conocimiento básico de SQL, puede leer los libros de Joe Celko (todos, pero especialmente SQL for Smartiesy Thinking in Sets) y mi blog, por supuesto :)
Quassnoi
3
Esto indica un error en nuestro subsistema de disco. Un disco RAID había fallado sin activar el sistema de monitoreo. Al verificar los registros de eventos, se encontró que SMART había marcado una unidad como defectuosa.
Gomibushi
7

PAGEIOLATCH_SH el 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:

  • El subsistema de E / S tiene un problema o está mal configurado
  • Subsistema de E / S sobrecargado por otros procesos que están produciendo una alta actividad de E / S
  • Mala gestión de índices
  • Concepto erróneo de unidad lógica o física
  • Problemas de red / latencia
  • Presión de memoria
  • Duplicación síncrona y AlwaysOn AG

Para intentar resolver el PAGEIOLATCH_SHtipo de espera alta , puede verificar:

  • SQL Server, consultas e índices, ya que muy a menudo esto se puede encontrar como una causa raíz de los PAGEIOLATCH_SHtipos de espera excesivos
  • Para la presión de la memoria antes de saltar a cualquier solución de problemas del subsistema de E / S

Siempre 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

G.Hunt
fuente