
Tengo una consulta que está tardando mucho más de lo habitual y no puedo decir si está bloqueada.
La consulta es algo como esto:
INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1
Esto insertará cientos de millones de filas. Tengo un índice sobre ZZZZZZZZ.
No hay sesiones de bloqueo. Cuando reviso sys.dm_exec_requests, muestra que el último tipo de espera esPAGEIOLATCH_SH No estoy seguro de lo que esto significa, excepto que tiene algo que ver con la E/S.
sys.dm_exec_sessions muestra que el estado es EN EJECUCIÓN, pero sp_who2 lo muestra como SUSPENDIDO.
Intenté ver si la tabla estaba creciendo, pero cuando llamo a sp_spaceused XXXXXX, sigo obteniendo los mismos valores.
¿Que más puedo hacer?
ACTUALIZAR:
Con la ayuda de las respuestas endesbordamiento de pila, he descubierto que hayun problema de E/S, y que mi consultaestá resultando en un promedio de alrededor de 600 registros que se insertan por minuto).
¿Cuál es mi siguiente paso?
¿Qué puedo hacer antes de empezar a asumir que mi disco está estropeándose?
Respuesta1
La consulta se está ejecutando, PAGEIOLATCH_SH es típico cuando se realizan muchas inserciones, ya que es una espera en el subsistema del disco. En realidad, el índice está obstaculizando el rendimiento ya que el índice obtiene una inserción por cada inserción en la tabla.
Cientos de millones son muchos registros y llevarán algún tiempo, ¿cuánto tiempo lleva funcionando?
Respuesta2
Si está utilizando 2005 o 2008, definitivamente ejecutaría el script sp_whoisactive desarrollado por SQL MVP Adam Mechanic. Básicamente es sp_who/sp_who2 con esteroides y debería brindarte toda la información que necesitas.