Soy una consulta de ejecución, que produce un plan:
Estadísticas IO:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Entonces, algunas preguntas
1. ¿Por qué las estadísticas IO muestran lecturas más altas que Profiler? .
En cuanto a KB314648 , está bien si Profiler informa números más altos que Statistics IO. Pero Profiler muestra 92283
lecturas en la consulta descrita, la misma ejecución. ¿Eso significa que Profiler no cuenta las lecturas de archivos de trabajo / tablas de trabajo?
2. ¿Cuál es la diferencia entre "Worktable" y "Workfile"
He encontrado que:
- los archivos de trabajo podrían usarse para almacenar resultados temporales para combinaciones hash y agregados hash.
- las tablas de trabajo podrían usarse para almacenar resultados temporales para el spool de consulta, variables lob, variables XML y cursores.
¿Hay alguna diferencia física entre ellos?
3. ¿Por qué hay "Mesa de trabajo" en este caso particular?
¿Por qué tengo una mesa de trabajo si hay 0 lecturas lógicas? ¿Está incluido en las estadísticas IO solo porque podría ser necesario (en caso de malas estimaciones)?
La descripción encontrada en technet parece vaga.
4. ¿Qué significa "Lecturas físicas" en Workfile?
¿Eso significa que no se otorgó suficiente memoria para la consulta, por lo que los datos tuvieron que escribirse en el disco mientras se ejecuta la consulta (advertencia amarilla en Hash Match)? ¿Puedo suponer que cada vez que veo la tabla de trabajo / archivo de trabajo en Statistics IO con lecturas físicas, no se ha otorgado suficiente memoria para la consulta y algunos resultados intermedios de la consulta tuvieron que escribirse en el disco tempdb? ¿Y cada vez que veo solo lecturas lógicas, se usa RAM?
5. ¿Un "archivo de trabajo" significa exactamente una tabla que se utiliza para un propósito?
Si hay más de un archivo de trabajo / mesa de trabajo, entonces no puedo saber para qué operación se utiliza.