SET STATISTICS IO- mesa de trabajo / archivo de trabajo

21

Soy una consulta de ejecución, que produce un plan: ingrese la descripción de la imagen aquí

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 92283lecturas 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.

Jānis
fuente
¿Cuál es la advertencia en el hash match? ¿Es eso un derrame tempdb?
Tom V - Equipo Monica
@TomV, sí, nivel de derrame 1 y nivel de derrame 2.
Jānis

Respuestas:

15

1. ¿Por qué las estadísticas IO muestran lecturas más altas que Profiler?

Ni idea, lo siento. A menudo hay diferencias porque están midiendo cosas diferentes como se menciona en el artículo de la base de conocimiento. No hay documentación adicional sobre esto que yo sepa. Es posible que pueda inferir algunas cosas a través de pruebas detalladas, pero realmente no hay garantía de que lo que encuentre se mantenga consistente en todas las versiones y compilaciones. El comportamiento previsto es lo suficientemente inconsistente, antes de tener en cuenta los posibles errores .

2. ¿Cuál es la diferencia entre "Worktable" y "Workfile"

Ambos son objetos internos; de lo contrario, es más o menos lo que sugieren los nombres: una tabla de trabajo tiene una estructura similar a una tabla, un archivo de trabajo es similar a un archivo. La estructura detallada no es visible, aunque algunas características amplias se pueden discernir inspeccionando sus métodos y siguiendo sus rutas de ejecución con un depurador.

3. ¿Por qué hay "Mesa de trabajo" en este caso particular?

Siempre se necesita una tabla de trabajo para una operación de hashing (modo fila). Se utiliza internamente para distribuir la entrada en particiones hash (un término sobrecargado, no relacionado con la partición de tablas) y para realizar un seguimiento del estado. Nunca he visto una tabla de trabajo de hashing que informe nada más que cero en la salida de estadísticas, pero nunca la he investigado.

4. ¿Qué significa "Lecturas físicas" en Workfile?

Los archivos de trabajo son parte del mecanismo empleado cuando se derrama una partición hash. Aunque no está documentado, las lecturas físicas y de lectura anticipada ocurren cuando el motor de ejecución recupera particiones hash derramadas de los archivos de trabajo.

5. ¿Un "archivo de trabajo" significa exactamente una tabla que se utiliza para un propósito?

Como recuerdo, puede haber múltiples instancias. No sé de ninguna manera que relacione una STATISTICS IOlínea particular con un objeto particular o nodo de plan. Esta es una limitación de larga data. Puede haber un cambio en esto en SQL Server 2016, aunque no lo he probado para ver si se aplica a objetos temporales internos.

En última instancia, no es tan útil aprender de la STATISTICS IOsalida para archivos de trabajo y tablas de trabajo más allá de lo que puede aprender mirando otra información en un plan posterior a la ejecución (o mediante DMV, eventos extendidos, etc.). Pido disculpas por la respuesta incompleta, pero es lo mejor que puedo ofrecer.

Paul White dice GoFundMonica
fuente