SET STATISTICS IO- Arbeitstisch / Arbeitsdatei

21

Ich führe eine Anfrage aus, die einen Plan erstellt: Bildbeschreibung hier eingeben

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

Also, einige Fragen

1. Warum zeigt Statistics IO höhere Lesezugriffe als Profiler? .

In Bezug auf KB314648 ist es in Ordnung, wenn Profiler höhere Zahlen als Statistics IO meldet. Aber Profiler zeigt 92283liest bei beschriebener Abfrage die selbe Ausführung an. Bedeutet das, dass der Profiler Workfile- / Worktable-Lesevorgänge nicht zählt?

2. Was ist der Unterschied zwischen "Worktable" und "Workfile"?

Ich habe festgestellt, dass:

  • Arbeitsdateien können verwendet werden, um temporäre Ergebnisse für Hash-Joins und Hash-Aggregate zu speichern.
  • Arbeitstabellen können zum Speichern temporärer Ergebnisse für Abfragespool, Lob-Variablen, XML-Variablen und Cursor verwendet werden.

Gibt es einen physischen Unterschied zwischen ihnen?

3. Warum gibt es in diesem speziellen Fall "Arbeitstisch"?

Warum habe ich überhaupt eine Arbeitstabelle, wenn es 0 logische Lesevorgänge gibt? Es ist in der Statistik enthalten, nur weil es notwendig sein könnte (im Falle von falschen Schätzungen)?

Beschreibung auf Technet gefunden scheint vage ..

4. Was bedeutet "physisches Lesen" in Workfile?

Bedeutet das, dass nicht genügend Arbeitsspeicher für die Abfrage zur Verfügung stand und die Daten während der Ausführung der Abfrage auf die Festplatte geschrieben werden mussten (gelbe Warnung bei Hash Match)? Kann ich davon ausgehen, dass, wenn in Statistics IO Worktable / Workfile mit physischen Lesevorgängen angezeigt wird, nicht genügend Speicher für die Abfrage bereitgestellt wurde und einige Zwischenergebnisse der Abfrage auf die temporäre Festplatte geschrieben werden mussten? Und wenn ich nur logische Lesevorgänge sehe, wird RAM verwendet?

5. Eine "Arbeitsdatei" bedeutet genau eine Tabelle, die für einen Zweck verwendet wird?

Wenn es mehr als eine Arbeitsdatei / einen Arbeitstisch gibt, kann ich nicht wissen, für welche Operation sie verwendet wird?

Jānis
quelle
Was ist die Warnung beim Hash-Match? Ist das eine tempdb Verschüttung?
Tom V - Team Monica
@TomV, Ja - Überlaufstufe 1 & Überlaufstufe 2.
Jānis

Antworten:

15

1. Warum zeigt Statistics IO höhere Lesezugriffe als Profiler?

Keine Ahnung, sorry. Es gibt oft Unterschiede, weil sie verschiedene Dinge messen, auf die im Knowledge Base-Artikel hingewiesen wird. Es gibt keine zusätzliche Dokumentation dazu, die mir bekannt ist. Möglicherweise können Sie durch ausführliche Tests auf einige Aspekte schließen, es gibt jedoch keine Garantie dafür, dass diese für alle Versionen und Builds gleich bleiben. Das beabsichtigte Verhalten ist nicht konsistent genug, bevor mögliche Fehler berücksichtigt werden .

2. Was ist der Unterschied zwischen "Worktable" und "Workfile"?

Beide sind interne Objekte; ansonsten ist es so ziemlich das, was die Namen andeuten: Eine Arbeitstabelle hat eine tabellenartige Struktur, eine Arbeitsdatei ist dateiartig. Die detaillierte Struktur ist nicht sichtbar, obwohl einige allgemeine Merkmale erkannt werden können, indem ihre Methoden überprüft und ihre Ausführungspfade mit einem Debugger verfolgt werden.

3. Warum gibt es in diesem speziellen Fall "Arbeitstisch"?

Für eine Hashing-Operation (Zeilenmodus) wird immer eine Arbeitstabelle benötigt. Es wird intern verwendet, um die Eingabe in Hash-Partitionen zu verteilen (ein überladener Begriff, der nicht mit der Tabellenpartitionierung zusammenhängt) und um den Status zu verfolgen. Ich habe noch nie gesehen, dass eine Hashing-Arbeitstabelle in der Statistikausgabe etwas anderes als null meldet, aber ich habe mich nie wirklich damit befasst.

4. Was bedeutet "physisches Lesen" in Workfile?

Arbeitsdateien sind Teil des Mechanismus, der angewendet wird, wenn eine Hash-Partition verschüttet wird. Obwohl dies nicht dokumentiert ist, werden die physischen und Vorauslesevorgänge ausgeführt, wenn die Ausführungsengine verschüttete Hash-Partitionen aus den Arbeitsdateien abruft.

5. Eine "Arbeitsdatei" bedeutet genau eine Tabelle, die für einen Zweck verwendet wird?

Soweit ich mich erinnere, kann es mehrere Instanzen geben. Ich kenne keine Möglichkeit, eine bestimmte STATISTICS IOLinie mit einem bestimmten Objekt oder Plan-Knoten in Beziehung zu setzen . Dies ist eine langjährige Einschränkung. Möglicherweise ändert sich dies in SQL Server 2016, obwohl ich nicht getestet habe, ob es für interne temporäre Objekte gilt.

Letztendlich ist es nicht so nützlich, aus der STATISTICS IOAusgabe von Arbeitsdateien und Arbeitstabellen mehr zu lernen, als Sie durch Betrachten anderer Informationen in einem Plan nach der Ausführung (oder über DMVs, erweiterte Ereignisse usw.) lernen können. Ich entschuldige mich für die unvollständige Antwort, aber es ist das Beste, was ich bieten kann.

Paul White sagt GoFundMonica
quelle