DBCC INDEXDEFRAG (Transact-SQL)
Aktualisiert: 14. April 2006
Defragmentiert Indizes der angegebenen Tabelle oder Sicht.
Wichtig: |
---|
Dieses Feature wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Verwenden Sie dieses Feature beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen ALTER INDEX. |
Transact-SQL-Syntaxkonventionen
Syntax
DBCC INDEXDEFRAG
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
[ WITH NO_INFOMSGS ]
Argumente
- database_name | database_id | 0
Die Datenbank, für die ein Index defragmentiert werden soll. Wird 0 angegeben, wird die aktuelle Datenbank verwendet. Datenbanknamen müssen den Regeln für Bezeichner entsprechen.
- table_name | table_id | view_name | view_id
Die Tabelle oder Sicht, für die ein Index defragmentiert werden soll. Tabellen- und Sichtnamen müssen den Regeln für Bezeichner entsprechen.
- index_name | index_id
Der Name der ID für den Index, der defragmentiert werden soll. Wenn nicht angegeben, werden von der Anweisung alle Indizes der angegebenen Tabelle oder Sicht defragmentiert. Indexnamen müssen den Regeln für Bezeichner entsprechen.
- partition_number | 0
Die Partitionsnummer des Indexes, der defragmentiert werden soll. Wenn nichts oder 0 angegeben ist, werden von der Anweisung alle Partitionen im angegebenen Index defragmentiert.
- WITH NO_INFOMSGS
Unterdrückt alle Informationsmeldungen mit einem Schweregrad von 0 bis 10.
Resultsets
DBCC INDEXDEFRAG gibt das folgende Resultset zurück (die Werte können abweichen), wenn ein Index in der Anweisung angegeben ist (sofern nicht WITH NO_INFOMSGS angegeben ist):
Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359 346 8
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Hinweise
DBCC INDEXDEFRAG defragmentiert die Blattebene eines Indexes, sodass die physische Reihenfolge der Seiten mit der logischen Reihenfolge (von links nach rechts) der Blattknoten übereinstimmt. Dadurch wird die Leistung beim Durchsuchen des Indexes verbessert.
Hinweis: |
---|
Wenn DBCC INDEXDEFRAG ausgeführt wird, tritt die Indexdefragmentierung seriell auf. Das bedeutet, dass der Vorgang bei einem einzelnen Index mit einem einzigen Thread ausgeführt wird. Es tritt keine Parallelität auf. Außerdem werden Vorgänge für mehrere Indizes aus derselben DBCC INDEXDEFRAG-Anweisung nur für jeweils einen Index ausgeführt. |
DBCC INDEXDEFRAG komprimiert auch die Seiten eines Indexes und berücksichtigt den beim Erstellen des Indexes angegebenen Füllfaktor. Alle leeren Seiten, die durch diese Komprimierung erstellt wurden, werden entfernt. Weitere Informationen finden Sie unter Füllfaktor.
Wenn sich ein Index über mehr als eine Datei erstreckt, defragmentiert DBCC INDEXDEFRAG nur jeweils eine Datei. Seiten werden nicht zwischen Dateien migriert.
Alle fünf Minuten sendet DBCC INDEXDEFRAG einen Bericht mit dem geschätzten fertig gestellten Prozentsatz an den Benutzer. DBCC INDEXDEFRAG kann an zu jedem Zeitpunkt des Vorgangs beendet werden. Der bereits fertig gestellte Prozentsatz bleibt erhalten.
Im Gegensatz zu DBCC DBREINDEX bzw. zum Vorgang der Indexerstellung allgemein ist DBCC INDEXDEFRAG ein Onlinevorgang. Es werden keine Sperren über längere Zeit errichtet. Daher blockiert DBCC INDEXDEFRAG keine aktiven Abfragen oder Aktualisierungen. Ein relativ unfragmentierter Index kann schneller defragmentiert werden, als ein neuer Index erstellt werden kann, da die Defragmentierungszeit im Zusammenhang mit der Fragmentierungsebene steht. Das Defragmentieren eines stark fragmentierten Indexes kann wesentlich länger dauern als der Neuerstellungsvorgang.
Die Defragmentierung wird immer vollständig protokolliert, unabhängig von der Einstellung des Datenbank-Wiederherstellungsmodells. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL). Bei der Defragmentierung eines stark fragmentierten Indexes werden möglicherweise mehr Protokolleinträge erstellt als bei der Indexerstellung mit vollständiger Protokollierung. Die Defragmentierung wird jedoch als eine Reihe von kurzen Transaktionen ausgeführt, sodass kein großes Protokoll benötigt wird, wenn Protokollsicherungen regelmäßigen durchgeführt werden oder SIMPLE als Einstellung für das Wiederherstellungsmodell festgelegt ist.
DBCC INDEXDEFRAG verschiebt Indexblattseiten an andere Stellen. Daher führt das Ausführen von DBCC INDEXDEFRAG für einen Index, der mit anderen Indizes auf dem Datenträger interleaved ist, nicht dazu, dass die Blattseiten im Index zusammenhängend sind. Erstellen Sie den Index neu, um das Gruppieren von Seiten zu verbessern.
DBCC INDEXDEFRAG kann nicht zum Defragmentieren eines deaktivierten Indexes oder eines Indexes mit deaktivierter Seitensperre (OFF) verwendet werden. Das Verwenden von DBCC INDEXDEFRAG für Systemtabellen wird nicht unterstützt.
Berechtigungen
Der Aufrufer muss Besitzer der Tabelle oder ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.
Beispiele
Im folgenden Beispiel werden alle Partitionen des PK_Product
_ProductID
-Indexes in der Production.Product
-Tabelle in der AdventureWorks
-Datenbank defragmentiert.
DBCC INDEXDEFRAG (AdventureWorks, "Production.Product", PK_Product_ProductID)
GO
Siehe auch
Verweis
DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)
Andere Ressourcen
Tabellen- und Indexarchitektur
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
14. April 2006 |
|