SET STATISTICS IO - worktable / workfile


21

Sono query di esecuzione, che produce piano: inserisci qui la descrizione dell'immagine

Statistiche 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.

Quindi, alcune domande

1. Perché Statistiche IO mostra letture più alte rispetto a Profiler? .

Per quanto riguarda KB314648 è OK se Profiler riporta numeri più alti di IO statistiche. Ma Profiler mostra le 92283letture alla query descritta, stessa esecuzione. Ciò significa che Profiler non conta le letture del file di lavoro / del worktable?

2. Qual è la differenza tra "Worktable" e "Workfile"

Ho scoperto che:

  • i file di lavoro potrebbero essere utilizzati per archiviare risultati temporanei per join hash e aggregati hash.
  • le tabelle di lavoro possono essere utilizzate per archiviare risultati temporanei per spool di query, variabili lob, variabili XML e cursori.

C'è qualche differenza fisica tra loro?

3. Perché c'è "Worktable" in questo caso particolare?

Perché ho un worktable, se ci sono 0 letture logiche? È incluso nelle statistiche IO solo perché potrebbe esserne necessario (in caso di stime errate)?

Descrizione trovata su technet sembra vaga ..

4. Che cosa significa "Letture fisiche" su File di lavoro?

Ciò significa che non è stata concessa memoria sufficiente per la query, quindi i dati dovevano essere scritti su disco durante l'esecuzione della query (avviso giallo su Hash Match)? Posso supporre che ogni volta che vedo il worktable / workfile in Statistics IO con letture fisiche, non è stata concessa memoria sufficiente per la query e alcuni risultati intermedi della query dovevano essere scritti sul disco tempdb? E ogni volta che vedo solo letture logiche, viene utilizzata la RAM?

5. Un "file di lavoro" indica esattamente una tabella utilizzata per uno scopo?

Se esiste più di un file di lavoro / tavolo di lavoro, non posso sapere a quale operazione viene utilizzato?


Qual è l'avvertimento sulla corrispondenza hash? È una fuoriuscita di tempdb?
Tom V - Team Monica,

@TomV, sì- versa il livello 1 e versa il livello 2.
Jānis

Risposte:


15

1. Perché Statistiche IO mostra letture più alte rispetto a Profiler?

Nessuna idea, scusa. Ci sono spesso differenze perché stanno misurando cose diverse come indicato nell'articolo della knowledge base. Non ci sono ulteriori documenti su questo che io sia a conoscenza. Potresti essere in grado di dedurre alcune cose attraverso test dettagliati, ma non c'è davvero alcuna garanzia che qualsiasi cosa trovi rimanga coerente tra le versioni e le build. Il comportamento previsto è abbastanza incoerente, prima di tenere conto di possibili bug .

2. Qual è la differenza tra "Worktable" e "Workfile"

Entrambi sono oggetti interni; altrimenti è praticamente ciò che suggeriscono i nomi: una tabella di lavoro ha una struttura simile a una tabella, un file di lavoro è simile a un file. La struttura dettagliata non è visibile, sebbene alcune funzionalità generali possano essere individuate controllando i loro metodi e seguendo i loro percorsi di esecuzione con un debugger.

3. Perché c'è "Worktable" in questo caso particolare?

Una tabella di lavoro è sempre necessaria per un'operazione di hashing (modalità riga). Viene utilizzato internamente per distribuire l'input in partizioni hash (un termine sovraccarico, non correlato al partizionamento delle tabelle) e per tenere traccia dello stato. Non ho mai visto una tabella di lavoro di hashing riportare qualcosa di diverso da zero nell'output delle statistiche, ma poi non ci ho mai veramente esaminato.

4. Che cosa significa "Letture fisiche" su File di lavoro?

I file di lavoro fanno parte del meccanismo impiegato quando una partizione hash si rovescia. Sebbene non siano documentate, le letture fisiche e read-ahead si verificano quando il motore di esecuzione recupera le partizioni hash versate dai file di lavoro.

5. Un "file di lavoro" indica esattamente una tabella utilizzata per uno scopo?

Come ricordo, potrebbero esserci più casi. Non conosco alcun modo per mettere in relazione una particolare STATISTICS IOlinea con un particolare oggetto o nodo del piano. Questa è una limitazione di vecchia data. Potrebbe esserci una modifica a questo in SQL Server 2016, anche se non ho testato per vedere se si applica agli oggetti temporanei interni.

In definitiva, non c'è molto utile da imparare STATISTICS IOdall'output per file di lavoro e tabelle di lavoro oltre a quello che puoi imparare guardando altre informazioni in un piano di post-esecuzione (o tramite DMV, eventi estesi ecc.). Chiedo scusa per la risposta incompleta, ma è la migliore che posso offrire dalla cima della mia testa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.