USTAW STATYSTYKI IO- stół roboczy / plik roboczy

21

Jestem zapytaniem wykonawczym, które tworzy plan: wprowadź opis zdjęcia tutaj

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 92283odczyty 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?

Jānis
źródło
Jakie jest ostrzeżenie dotyczące dopasowania skrótu? Czy to wyciek tempdb?
Tom V - Team Monica
@TomV, tak - poziom rozlania 1 i poziom rozlania 2
Jānis

Odpowiedzi:

15

1. Dlaczego statystyki IO pokazują wyższe odczyty niż Profiler?

Przepraszam, nie mam pojęcia. Często występują różnice, ponieważ mierzą różne rzeczy, jak wspomniano w artykule bazy wiedzy. Nie mam na ten temat żadnej dodatkowej dokumentacji. Być może będziesz w stanie wywnioskować pewne rzeczy poprzez szczegółowe testowanie, ale tak naprawdę nie ma gwarancji, że cokolwiek znajdziesz, pozostanie spójne między wersjami i kompilacjami. Zamierzone zachowanie jest wystarczająco niespójne, zanim zostanie uwzględnione możliwe błędy .

2. Jaka jest różnica między „stołem roboczym” a „plikiem roboczym”

Oba są obiektami wewnętrznymi; w przeciwnym razie jest to prawie to, co sugerują nazwy: stół roboczy ma strukturę podobną do tabeli, plik roboczy jest podobny do pliku. Szczegółowa struktura nie jest widoczna, chociaż niektóre szerokie funkcje można rozpoznać, sprawdzając ich metody i podążając ścieżkami ich wykonania za pomocą debuggera.

3. Dlaczego w tym konkretnym przypadku istnieje „Stół roboczy”?

Stół roboczy jest zawsze potrzebny do operacji mieszania (w trybie wiersza). Służy wewnętrznie do dystrybucji danych wejściowych do partycji mieszających (termin przeciążony, niezwiązany z partycjonowaniem tabel) i do śledzenia statusu. Nigdy nie widziałem, aby tabela robocza haszująca raportowała coś innego niż zero w wynikach statystycznych, ale nigdy tak naprawdę nie przyjrzałam się temu.

4. Co oznacza „Odczyty fizyczne” w pliku roboczym?

Pliki robocze są częścią mechanizmu stosowanego podczas rozlewania partycji mieszającej. Chociaż nieudokumentowane, odczyty fizyczne i odczyt z wyprzedzeniem występują, gdy silnik wykonawczy pobiera rozlane partycje skrótu z plików roboczych.

5. Jeden „plik roboczy” oznacza dokładnie jedną tabelę używaną do jednego celu?

Jak pamiętam, może istnieć wiele instancji. Nie ma możliwości, aby powiązać określoną STATISTICS IOlinię z konkretnym obiektem lub węzłem planu. Jest to wieloletnie ograniczenie. Może to ulec zmianie w SQL Server 2016, chociaż nie testowałem, czy dotyczy to wewnętrznych obiektów tymczasowych.

Ostatecznie niewiele można się nauczyć z STATISTICS IOdanych wyjściowych plików roboczych i tabel roboczych poza tymi, których można się nauczyć, patrząc na inne informacje w planie po wykonaniu (lub za pośrednictwem DMV, zdarzeń rozszerzonych itp.). Przepraszam za niepełną odpowiedź, ale jest to najlepsze, co mogę zaoferować z czubka głowy.

Paul White mówi GoFundMonica
źródło