MS SQL Page Split Verwirrung

7

Ich bin etwas verwirrt über Seitenaufteilungen in MS SQL und suche nach einer endgültigen Antwort. Es scheint zwei Versionen der Geschichte zu geben:

1 - Der Füllfaktor wirkt sich nur darauf aus, wie voll die Seiten zum Zeitpunkt der Erstellung / Neuerstellung des Index sind. Seitenteile sind immer 50/50

2 - Der Füllfaktor beeinflusst auch, wie Seiten geteilt werden. Wenn also 70% Füllfaktor vorhanden sind und eine Seite überläuft, wird sie zu 70/30 aufgeteilt

Vielen Dank

Mashchax
quelle
1
Die Dokumentation unterstützt Version 1 ( msdn.microsoft.com/en-us/library/ms177459.aspx ), in der angegeben ist, dass ungefähr die Hälfte der Zeilen verschoben wird.
Dan Guzman

Antworten:

9

Aus Books Online (Schwerpunkt meiner):

FILLFACTOR = fillfactor Gilt für: SQL Server 2008 bis SQL Server 2016, SQL Database V12.

Gibt einen Prozentsatz an, der angibt, wie voll das Datenbankmodul die Blattebene jeder Indexseite während der Indexerstellung oder -wiederherstellung machen soll . Der Füllfaktor muss ein ganzzahliger Wert von 1 bis 100 sein. Wenn der Füllfaktor 100 ist, erstellt das Datenbankmodul Indizes mit bis zur Kapazität gefüllten Blattseiten.

Die Einstellung FILLFACTOR gilt nur, wenn der Index erstellt oder neu erstellt wird . Das Datenbankmodul behält den angegebenen Prozentsatz des leeren Speicherplatzes auf den Seiten nicht dynamisch bei. Verwenden Sie zum Anzeigen der Füllfaktoreinstellung die Katalogansicht sys.indexes.

Der Füllfaktor gilt für die Blattseiten. PAD_INDEX bestimmt, was mit Nicht-Blattseiten passiert. Von derselben BoL-Seite:

PAD_INDEX = {ON | AUS }

EIN Der vom Füllfaktor angegebene Prozentsatz des freien Speicherplatzes wird auf die Seiten der Zwischenebene des Index angewendet.

AUS oder Füllfaktor ist nicht angegeben. Die Seiten der mittleren Ebene sind nahezu voll

Das Aufteilen von Seiten kann auf allen Ebenen des BTree erfolgen, einschließlich der Stammebene. Aufgrund des Fan-Outs ist die Häufigkeit, mit der Zwischenseiten geteilt werden, (typischerweise) eine Größenordnung geringer als die, mit der Blätter geteilt werden. Es gibt auch viel weniger Nicht-Blattseiten als Blattseiten. Folglich ist PAD_INDEX weniger besorgniserregend als FILLFACTOR. Es lohnt sich immer noch darüber nachzudenken, insbesondere bei zufällig eingefügten Indizes.

Während des Schreibens werden die Seiten zu 100% gefüllt. Dann werden sie 50/50 oder so nah wie möglich aufgeteilt, um sicherzustellen, dass jede Zeile vollständig auf einer einzelnen Seite enthalten ist. Ich glaube, die Aufteilung ist immer 50/50. Nachfolgende Schreibvorgänge können jedoch verzerrt sein, sodass eine der neuen Seiten viel schneller als die andere gefüllt wird.

Michael Green
quelle
Vielen Dank für Ihre Antwort. Ich denke, es könnte Situationen im wirklichen Leben geben, in denen die Trennung nicht annähernd 50/50 ist. Eine Klarstellung bitte: Gilt das wirklich nur für die Blattseiten? Ich dachte, das Teilen von Seiten betrifft auch Zwischenstufen, und der Füllfaktor gilt auch für sie.
Mashchax
@Mashchax Seitensplits sind möglicherweise nicht immer 50/50, sie können gezackt sein. Der Füllfaktor gilt nur für Blattseiten, wie Michael gesagt hat.
Sean Gallardy - Rentner
Gute Erklärung, insbesondere die Klarstellung, dass sie nur für die Erstellung / Neuerstellung von Indizes gilt; das war etwas leicht zu übersehen
Bruno Guardia
@ SeanGallardy Unter welchen Umständen wäre die Trennung nicht gleichmäßig? Gibt es externe Links, die Sie teilen können?
Michael Green
@MichaelGreen "Es kommt darauf an" :) und nein, nicht öffentlich dokumentiert.
Sean Gallardy - Rentner