Jestem zapytaniem wykonawczym, które tworzy plan:
Statystyka 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.
Więc kilka pytań
1. Dlaczego statystyki IO pokazują wyższe odczyty niż Profiler? .
W przypadku KB314648 jest OK, jeśli Profiler zgłasza wyższe liczby niż statystyki we / wy. Ale Profiler pokazuje 92283
odczyty przy opisanym zapytaniu, to samo wykonanie. Czy to oznacza, że Profiler nie liczy odczytów plików roboczych / tabel roboczych?
2. Jaka jest różnica między „stołem roboczym” a „plikiem roboczym”
I znaleziono , że:
- pliki robocze mogą być używane do przechowywania tymczasowych wyników dla złączeń skrótu i agregatów skrótu.
- tabele robocze mogą być używane do przechowywania tymczasowych wyników dla bufora zapytań, zmiennych lob, zmiennych XML i kursorów.
Czy jest między nimi jakaś fizyczna różnica?
3. Dlaczego w tym konkretnym przypadku istnieje „Stół roboczy”?
Dlaczego w ogóle mam tabelę roboczą, jeśli jest 0 logicznych odczytów? Jest zawarty w statystykach IO tylko dlatego, że może być potrzebny (w przypadku złych szacunków)?
Opis znaleziony na technecie wydaje się niejasny.
4. Co oznacza „Odczyty fizyczne” w pliku roboczym?
Czy to oznacza, że nie przydzielono wystarczającej ilości pamięci na zapytanie, więc dane musiały być zapisywane na dysk podczas wykonywania zapytania (żółte ostrzeżenie podczas Hash Match)? Czy mogę założyć, że ilekroć widzę stół roboczy / plik roboczy w statystykach we / wy z fizycznymi odczytami, nie było wystarczającej ilości pamięci dla zapytania i niektóre pośrednie wyniki zapytania musiały zostać zapisane na dysku tempdb? I ilekroć widzę tylko logiczne odczyty, używana jest pamięć RAM?
5. Jeden „plik roboczy” oznacza dokładnie jedną tabelę używaną do jednego celu?
Jeśli jest więcej niż jeden plik roboczy / stół roboczy, to nie mogę wiedzieć, do jakiej operacji jest używany?