SQL Server Closeup #4: Undokumentierter SQL Befehl DBCC IND

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:

Ausgabe des DBCC IND

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

Check Also

SQL Saturday #409 Rheinland – Slides und Demos

Vergangenen Samstag fand der dritte deutsche SQL Saturday statt. Wie auch im letzten Jahr konnte dafür als Austragungsort die Hochschule Bonn-Rhein-Sieg genutzt werden. Gemeinsam mit Alexander Karl durfte ich dort eine Session zum Thema "SQL Server vs. Azure DocumentDB – Ein Battle zwischen XML und JSON" halten. Die verwendeten Slides und Code Beispiele findet ihr in diesem Blog Post.