Heim > Datenbank > MySQL-Tutorial > Warum sind die logischen Lesevorgänge so hoch, wenn Aggregatfunktionen mit Fenster verwendet werden, insbesondere bei gängigen Unterausdruckspools?

Warum sind die logischen Lesevorgänge so hoch, wenn Aggregatfunktionen mit Fenster verwendet werden, insbesondere bei gängigen Unterausdruckspools?

Linda Hamilton
Freigeben: 2024-12-26 18:47:15
Original
899 Leute haben es durchsucht

Why are logical reads so high when using windowed aggregate functions, especially with common subexpression spools?

Warum sind logische Lesevorgänge für Aggregatfunktionen mit Fenster so hoch?

Aggregatfunktionen mit Fenster können dazu führen, dass in Ausführungsplänen mit Common viele logische Lesevorgänge gemeldet werden Subexpression-Spools, insbesondere für große Tabellen. Ziel dieses Artikels ist es, den Grund für diese Beobachtung zu erläutern und Einblicke in das Verständnis logischer Lesezahlen für Arbeitstische zu geben.

Erklärung

Logische Lesevorgänge werden bei Arbeitstischen anders gezählt als bei herkömmlichen Spool-Tabellen. In Arbeitstabellen wird jeder Zeilenlesevorgang in einen „logischen Lesevorgang“ übersetzt. Dies unterscheidet sich von der Meldung gehashter Seiten für „echte“ Spooltabellen.

Der Grund für die Zählung von Lesevorgängen auf diese Weise besteht darin, dass dadurch aussagekräftigere Informationen für die Analyse bereitgestellt werden. Die Verfolgung gehashter Seiten für Arbeitstabellen ist aufgrund der internen Natur dieser Strukturen weniger nützlich. Die gespoolten Berichtszeilen spiegeln die tatsächliche Auslastung der Tempdb-Ressourcen besser wider.

Formelableitung

Die abgeleitete Formel für die Vorhersage logischer Arbeitstabellen-Lesevorgänge lautet:

Worktable logical reads = 1 + (NumberOfRows * 2) + (NumberOfGroups * 4)
Nach dem Login kopieren

Diese Formel berücksichtigt die Folgendes:

  • 1: Stellt das anfängliche Laden von Daten in die Arbeitstabelle dar.
  • NumberOfRows * 2: Die beiden sekundären Spulen ( (die zur Reduzierung der Kosten für die Rückgabe von Zeilen erstellt wurden) werden vollständig gelesen zweimal.
  • NumberOfGroups * 4: Der primäre Spool gibt Zeilen wie unten erläutert aus, was zur Anzahl der unterschiedlichen Gruppenwerte führt (plus 1).

Reihenausgabe der Primärspule

Die Primärspule hat die Aufgabe, Reihen anzusammeln und Durchführen der Aggregatberechnung funktioniert wie folgt:

  • Liest jede Zeile aus der Eingabe und schreibt sie in die Arbeitstabelle.
  • Wenn eine neue Gruppe gefunden wird, gibt sie eine Zeile an die aus Operator für verschachtelte Schleifen, der den Beginn einer neuen Gruppenpartition anzeigt.
  • Durchschnittswerte für jede Gruppe werden anhand der Zeilen in der berechnet Arbeitstabelle.
  • Durchschnittswerte werden mit den Zeilen in der Arbeitstabelle verbunden.
  • Die Arbeitstabelle wird gekürzt, um sie für die nächste Gruppe vorzubereiten.
  • Um die letzte Gruppe zu verarbeiten, gibt die Spule aus eine Dummy-Reihe.

Zusätzlich Überlegungen

In Ihrem Testskript haben Sie festgestellt, dass die Replikation desselben Prozesses zu weniger logischen Lesevorgängen führte (11). Diese Diskrepanz wird auf Optimierungsalgorithmen zurückgeführt, die der Abfrageprozessor in verschiedenen Umgebungen verwendet. Die Formel bleibt in allgemeinen Fällen gültig, in denen verschachtelte Schleifen oder Hash-Joins verwendet werden.

Fazit

Das Verständnis der Zählunterschiede für logische Lesevorgänge in Arbeitstabellen ist für die genaue Interpretation von Ausführungsplänen mit Fensteraggregatfunktionen unerlässlich. Die bereitgestellte Formel bietet eine nützliche Möglichkeit, logische Lesevorgänge in der Arbeitstabelle abzuschätzen und hilft bei Leistungsanalysen und Optimierungsbemühungen.

Das obige ist der detaillierte Inhalt vonWarum sind die logischen Lesevorgänge so hoch, wenn Aggregatfunktionen mit Fenster verwendet werden, insbesondere bei gängigen Unterausdruckspools?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage