¿Cómo averiguar cuánto recursos de E / S se está utilizando una tarea, sesión, solicitud o transacción?
-
29-09-2020 - |
Pregunta
¿Cómo descubrir cuánto recursos de I / O se usa una tarea, sesión, solicitud o transacción?
Por tarea Me refiero a la DMV llamada DMV sys.dm_os_tasks . Por sesión me refiero a la DMV SYS.DM_EXEC_ESESSIONSIONS
A veces, una sesión tiene una solicitud, por solicitud, me refiero a la DMV SYS.DM_EXEC_REQUESTS O una sesión puede tener una transacción en su lugar, Sys. dm_tran_database_transacciones
¿Cómo puedo vincular estas cosas con uso de E / S ?
Eché un vistazo a la DMV llamada Dmv sys.dm_os_tasks .
sys.dm_os_tasks - no muestra pendientes_io_byte_count
Este es un ejemplo de los resultados de mi consulta mientras intentaba monitorear algunas esperas de CXPACKETS.
Pendiente_io_Count parece estar bien, pero Pending_io_By_Counts siempre son cero.
¿Qué podría ser una alternativa? Quiero medir el uso de E / S de cada proceso paralelo.
De hecho, podría ser solo el uso de E / S de cada sesión o solicitud.
Incluso las sesiones sin solicitud a veces son buenas para ver, porque podrían estar bloqueando otros procesos.
Solución
Si está buscando la E / S física real para una consulta, debe buscar en el ShowPlan XML para el elemento 'ActualPhysicalReads':
schemas.microsoft.com/sqlserver/2004/07/showplan
Sin embargo, es probable que esas lecturas físicas solo ocurran la primera vez que se almacena en caché.Las ejecuciones posteriores tienen más probabilidades de tirar de las páginas de la memoria, no desde el disco.
hth