Eu sou query executeg, que produz plano:
Estatí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.
Então, algumas perguntas
1. Por que o IO do Statistics mostra leituras mais altas que o Profiler? .
Quanto ao KB314648, não há problema se o Profiler reportar números mais altos que o Statistics IO. Mas o Profiler mostra 92283
leituras na consulta descrita, a mesma execução. Isso significa que o Profiler não conta as leituras de 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 agregados de hash.
- As 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 em particular?
Por que eu tenho uma tabela de trabalho, se houver 0 leituras lógicas? Está incluído nas estatísticas IO apenas porque pode ser necessário (em caso de estimativas ruins)?
A descrição encontrada no technet parece vaga.
4. O que "leituras físicas" no arquivo de trabalho significa?
Isso significa que não havia memória suficiente concedida para a consulta; portanto, os dados tiveram que ser gravados no disco enquanto a consulta é executada (aviso amarelo no Hash Match)? Posso assumir que sempre que vejo tabela de trabalho / arquivo de trabalho no Statistics IO com leituras físicas, não há memória suficiente concedida para consulta e alguns resultados intermediários da consulta precisam 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 usada para uma finalidade?
Se houver mais de um arquivo de trabalho / mesa de trabalho, não posso saber em que operação ele é usado?