In den Tiefen des SQL Servers findet sich so mancher undokumentierter Befehl.
Unter anderem gibt es eine Reihe von DBCC Befehlen, die einen Blick unter die Haube des SQL Servers erlauben.
In diesem Posting möchte ich den SQL Befehl DBCC IND vorstellen, mit dessen Hilfe man einen Überblick über die Pages einer Datenbank ausgeben kann.
Dieser Befehl gilt als Sicher und kann auch in Produktivumgebungen eingesetzt werden.
Im Gegensatz zu anderen undokumentierten DBCC Befehlen, wie z.B. DBCC PAGE, muss bei DBCC IND nicht das Traceflag 3604 (Umleitung der Trace Ausgabe auf den Client) gesetzt werden, damit man eine Anzeige erhält.
SQL Syntax des DBCC IND Befehls
Der DBCC IND Befehl hat 4 Parameter wovon der vierte Parameter optional ist:
DBCC IND ( { 'dbname' | dbid } , { 'objname' | objid } , {nonclustered indid | 1 | 0 | -1 | -2 } [, partition_number] )
Der erste Parameter erwartet einen Datenbanknamen oder eine Datenbank ID.
Der zweite Parameter erwartet einen Objektnamen oder eine Objekt ID von einer Tabelle oder einer Indexed View.
Der dritte Parameter erwartet entweder die ID eines Non-Clustered Indizes (2-250 bzw. 256-1005) oder einen der folgenden Werte 0, 1, -1 oder -2:
Wert | Funktion |
---|---|
0 | Zeigt die Informationen für In-Row Data Pages und In-Row IAM Pages des angegebenen Objektes an. |
1 |
Zeigt die Informationen für alle Pages, sowie IAM Pages, Data Pages und jede existierende LOB Page oder Row-Overflow Page, des angegebenen Objektes an. Wenn das angegebene Objekt einen Clustered Index hat, werden auch die Index Pages mit eingeschlossen. |
-1 | Zeigt die Informationen für alle IAM Pages, Data Pages und Index Pages für alle Indizes des angegebenen Objektes an. Dies beinhaltet auch LOB Pages und Row-Overflow Pages. |
-2 | Zeigt die Informationen für alle IAM Pages des angegebenen Objektes an. |
Non-Clustered Index ID | Zeigt die Informationen für alle IAM Pages, Data Pages und Index Pages für einen bestimmten Index an. Dies beinhaltet auch LOB Pages und Row-Overflow Pages, die Teil der Included Columns des Index sein können. |
Der vierte Parameter wurde mit dem SQL Server 2005 hinzugefügt und ist Optional. Mit diesem Parameter kann man die Ausgabe auf eine bestimmte Partition einschränken. Wenn keine Partition oder eine 0 angegeben wird, werden die Informationen für alle Partitionen angezeigt.
Ausgabe des DBCC IND Befehls
Hier ein Screenshot einer DBCC IND Ausgabe:
Und natürlich eine kurze Erklärung zu den einzelnen Spalten:
Spaltenname | Bedeutung |
---|---|
PageFID | Die File ID der Page |
PagePID | Die Page in File ID der Page |
IAMFID | Die File ID der IAM Page, die diese Page verwaltet |
IAMPID | Die Page in File ID der IAM Page, die diese Page verwaltet |
ObjectID | Die ID des Objektes |
IndexID | Die ID des Indizes (Zulässige Werte sind 0-250 und 256-1005) |
PartitionNumber | Die Partition Number innerhalb der Tabelle oder des Index für diese Page |
PartitionID | Die ID der Partition, die diese Page enthält. Diese ist eindeutig für jede Datenbank |
iam_chain_type | Der Typ der Allocation Unit: in-row data, row-overflow data oder LOB data |
PageType |
1 = Data Page 2 = Index Page 3 = TEXT_MIXED_PAGE 4 = TEXT_TREE_PAGE 10 = IAM Page |
IndexLevel |
Index Ebene des Binärbaums. 0 steht für den Blattknoten und wird hochgezählt bis zum Stamm. |
NextPageFID | Die File ID der Folge-Page innerhalb dieser Ebene |
NextPagePID | Die Page in File ID der Folge-Page innerhalb dieser Ebene |
PrevPageFID | Die File ID der vorgelagerten Page innerhalb dieser Ebene |
PrevPagePID | Die Page in File ID der vorgelagerten Page innerhalb dieser Ebene |