Mehrere Fragen zu SGAM & GAM & IAM & PFS in SQL Server

8

Haben Sie mehrere Fragen zur internen Struktur von SQL Server.

Nehmen wir an, wir haben eine Tabelle in einer Datenbank.

  1. SGAM- und GAM-Seiten verfolgen gemeinsam genutzte und einheitliche Ausdehnungen innerhalb eines einzelnen GAM-Intervalls (~ 4 GB) und helfen uns bei der Zuweisung geeigneter Ausdehnungsarten bei der Zuweisung von Seiten / Ausdehnungen (anfänglich werden die ersten 8 Seiten aus gemischten Ausdehnungen und Positionen dieser Seiten zugewiesen Rekorder auf IAM-Seiten und danach von GAM-Extents (einheitliche Extents) und diese Informationen werden auf der nächsten verketteten IAM-Seite gespeichert).

    Angenommen, die Seiten für die Tabelle wurden zugewiesen, und die Tabellengröße beträgt mehr als 8 Seiten. Einige Zeit später wurden Zeilen gelöscht, sodass wiederverwendbarer Speicherplatz übrig blieb. Woher weiß SQL Server, dass Extents freien Speicherplatz haben?

    Seiten enthalten Informationen zur Größe des freien Speicherplatzes, es ist jedoch zu zeitaufwändig, jede Seite zu überprüfen. Bits auf SGAM- und GAM-Seiten sagen nichts darüber aus, dass diese Erweiterung zugewiesen ist oder einige freie Seiten enthält (die gesamte Seite ist kostenlos, nicht teilweise).

  2. Dateikopf- & SGAM- & GAM- & IAM-Seiten gehören zu den ersten Seiten innerhalb einer Datei. Welche Datenstruktur weist tatsächlich auf sie hin?

Newprint
quelle

Antworten:

11

Woher weiß SQL Server, dass Extents freien Speicherplatz haben?

SQL Server verfolgt den freien Speicherplatz auf der Seite, in Heap-Tabellen sowie auf LOB-Seiten mithilfe der PSF-Seite intern.

Sie können sys.dm_db_file_space_usageDMV auch verwenden, um dies herauszufinden total_page_count, allocated_extent_page_countsowie unallocated_extent_page_countinnerhalb einer Datenbank.

PFS-Seiten (Page Free Space) zeichnen den Zuordnungsstatus jeder Seite auf, ob eine einzelne Seite zugewiesen wurde, und die Menge an freiem Speicherplatz auf jeder Seite. Das PFS verfügt über ein Byte für jede Seite und zeichnet auf, ob die Seite zugewiesen ist und wenn ja, ob sie leer ist, 1 bis 50 Prozent voll, 51 bis 80 Prozent voll, 81 bis 95 Prozent voll oder 96 bis 100 Prozent voll.

Eine PFS-Seite ist die erste Seite nach der Datei-Header-Seite in einer Datendatei (Seitenzahl 1). Darauf folgt eine GAM-Seite (Seite 2) und anschließend eine SGAM-Seite (Seite 3). Nach der ersten PFS-Seite befindet sich eine PFS-Seite mit einer Größe von ungefähr 8.000 Seiten. Nach der ersten GAM-Seite auf Seite 2 gibt es eine weitere GAM-Seite mit 64.000 Speicherbereichen und nach der ersten SGAM-Seite auf Seite 3 eine weitere SGAM-Seite mit 64.000 Speicherbereichen. Die folgende Abbildung zeigt die Reihenfolge der Seiten, die vom Datenbankmodul zum Zuweisen und Verwalten von Speicherbereichen verwendet werden.

Klicken Sie hier zum Vergrößern - Ausgabe mit DBCC PAGE

Geben Sie hier die Bildbeschreibung ein

Siehe: Innerhalb der Storage Engine: GAM, SGAM, PFS und andere Zuordnungszuordnungen

Dateikopf- & SGAM- & GAM- & IAM-Seiten gehören zu den ersten Seiten innerhalb einer Datei. Welche Datenstruktur weist tatsächlich auf sie hin?

Ich verstehe diese Frage nicht. Die kleinste Speichereinheit ist eine Seite. Acht 8K-Seiten bilden einen Umfang. Folgendes besteht aus einer Datenseite :

Geben Sie hier die Bildbeschreibung ein

Ich würde wärmstens empfehlen, den SQLSkills.com-Blog zu lesen, in dem Paul und sein Team viel über SQL Server-Interna bloggen .

Kin Shah
quelle