Estou executando a consulta, que produz o plano:
Estatística 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.
Então, algumas perguntas
1. Por que o Statistics IO mostra leituras mais altas do que o Profiler? .
Quanto ao KB314648 , tudo bem se o Profiler relatar números mais altos do que o Statistics IO. Mas o Profiler mostra 92283
as leituras na consulta descrita, na mesma execução. Isso significa que o Profiler não conta as leituras do arquivo de trabalho/tabela de trabalho?
2. Qual é a diferença entre "Worktable" e "Workfile"
Eu descobri que:
- arquivos de trabalho podem ser usados para armazenar resultados temporários para junções de hash e agregações de hash.
- tabelas de trabalho podem ser usadas para armazenar resultados temporários para spool de consulta, variáveis lob, variáveis XML e cursores.
Existe alguma diferença física entre eles?
3. Por que existe "Worktable" neste caso particular?
Por que eu tenho uma mesa de trabalho, se houver 0 leituras lógicas? Está incluído nas estatísticas IO apenas porque pode ser necessário (no caso de estimativas incorretas)?
A descrição encontrada no technet parece vaga.
4. O que significa "leituras físicas" no arquivo de trabalho?
Isso significa que não havia memória suficiente concedida para a consulta, então os dados tiveram que ser gravados no disco enquanto a consulta é executada (aviso amarelo no Hash Match)? Posso presumir que sempre que vejo a tabela de trabalho/arquivo de trabalho no Statistics IO com leituras físicas, não há memória suficiente concedida para a consulta e alguns resultados intermediários da consulta tiveram que ser gravados no disco tempdb? E sempre que vejo apenas leituras lógicas, a RAM é usada?
5. Um "arquivo de trabalho" significa exatamente uma tabela que é usada para um propósito?
Se houver mais de um arquivo/mesa de trabalho, não posso saber para qual operação ele é usado.