Defragmentieren von Indizes für Project Server 2007-Datenbanken

Letzte Aktualisierung: September 2008

 

Letztes Änderungsdatum des Themas: 2015-02-27

Datenbank-Wartungsaufgaben können entweder mit Transact-SQL-Befehlen oder mit dem Datenbankwartungs-Assistenten ausgeführt werden. Dieser Artikel enthält Informationen zu beiden Methoden.

Es gibt die folgenden empfohlenen Datenbankwartungsaufgaben für Microsoft Office Project Server 2007-Datenbanken:

  • Überprüfen der Datenbankintegrität

  • Defragmentieren der Indizes durch Neuanordnen oder Neuerstellen

  • Festlegen des Füllfaktors für einen Server

  • Überwachen der Datenbankgröße für die Vorabvergrößerung oder Verkleinerung von Datenbanken

  • Bereinigen des Verlaufs

  • Aktualisieren der Statistiken

Defragmentieren der Indizes durch Neuanordnen oder Neuerstellen

Zur Fragmentierung kommt es, wenn die logische und physische Speicherzuordnung einer Datenbank viele verstreute Speicherbereiche enthält, die unzureichend sind, physisch nicht zusammenhängend sind oder für eine effiziente Verwendung zu fragmentiert sind. Die Fragmentierung kann das Ergebnis vieler Einfüge-, Aktualisierungs- oder Löschvorgänge in einer Tabelle sein. Wenn eine Tabelle fragmentiert wird, werden auch die in der Tabelle definierten Indizes fragmentiert.

Office Project Server 2007 verwendet GUID-Typen als Clusterschlüssel. Dadurch werden gleichzeitige Einfügungen vermieden, die Anspruch auf dieselben Datenseiten erheben (Einfügen von Hotspots), die aber Ursache für die Fragmentierung von Tabellen und Indizes sein können. Die Fragmentierung kann auftreten, weil neue Datensätze anstatt am Ende an einer beliebigen Stelle in der B-Struktur eingefügt werden können, was zu einer größeren Neigung zur Seitenteilung (Index und Daten) und damit Fragmentierung führt. Dieses Risiko wird durch das Clustering mit zusammengesetzten Schlüsseln reduziert, die mithilfe der Projekt-UID sicherstellen, dass Datenseiten verwandte Daten enthalten. Die regelmäßige Defragmentierung größerer Tabellen verbessert jedoch die Leistung, insbesondere bei großen Bereitstellungen von Office Project Server 2007.

Im Laufe der Zeit kann die Datenbankfragmentierung zu Leistungseinbußen (unnötige Datenträgeraktivität) und ineffizienter Speicherplatznutzung führen. Um das Risiko und die Häufigkeit der Fragmentierung zu reduzieren, legen Sie die Größe von Inhaltsdatenbanken basierend auf Ihren Unternehmensanforderungen und der Datenbankarchitektur manuell so groß wie möglich fest. Wenn in Ihrem Unternehmen beispielsweise Inhaltsdatenbanken auf 100 GB begrenzt werden müssen, legen Sie nach dem Erstellen der Inhaltsdatenbanken deren Größe in SQL Server Management Studio auf 100 GB fest.

Tabellen können zwar defragmentiert werden, aber die Defragmentierung von Indizes bietet mehr Vorteile im Hinblick auf die Datenbankleistung und ist außerdem wesentlich schneller. In diesem Artikel wird nur die Defragmentierung von Indizes beschrieben.

Bestimmen Sie vor der Implementierung eines Datenbankfragmentierung-Wartungsplans, welche Tabellen und Indizes den höchsten Fragmentierungsgrad aufweisen. Erstellen Sie dann einen Wartungsplan, um diese Indizes neu zu erstellen oder anzuordnen.

Die Fragmentierung kann wie folgt gemessen werden:

  • Verwenden Sie in SQL Server 2005 die dynamische Verwaltungssicht sys.dm_db_index_physical_stats

  • Verwenden Sie in SQL Server 2000 DBCC SHOWCONTIG

Beachten Sie, dass der Algorithmus für die Berechnung der Fragmentierung in sys.dm_db_index_physical_stats genauer ist als in DBCC SHOWCONTIG. Demzufolge sind die mithilfe von sys.dm_db_index_physical_stats berechneten Fragmentierungswerte höher.

Messen der Fragmentierung mit "sys.dm_db_index_physical_stats" (SQL Server 2005)

Verwenden Sie in SQL Server 2005 die dynamische Verwaltungssicht sys.dm_db_index_physical_stats, um die Fragmentierung für die Indizes in einer angegebenen Tabelle oder Ansicht zu bestimmen.

Zum Messen der Fragmentierung wird empfohlen, die Spalte avg_fragmentation_in_percent zu überwachen. Der Wert für avg_fragmentation_in_percent sollte für eine optimale Leistung möglichst nahe bei 0 liegen. Werte zwischen 0 und 10 % können jedoch akzeptabel sein.

Weitere Informationen zur Verwendung von sys.dm_db_index_physical_stats finden Sie unter sys.dm_db_index_physical_stats (https://go.microsoft.com/fwlink/?linkid=128479\&clcid=0x407)

Messen der Fragmentierung mit DBCC SHOWCONTIG (SQL Server 2000)

Zum Überprüfen der Fragmentierung von Datenbanktabellen kann der Administrator mithilfe der DBCC SHOWCONTIG-Funktion die logische Fragmentierung und die Blockscanfragmentierung ermitteln. Ausführliche Erläuterungen zu den Ergebnissen von DBCC SHOWCONTIG finden Sie unter DBCC SHOWCONTIG (in englischer Sprache) (https://go.microsoft.com/fwlink/?linkid=110841\&clcid=0x407).

Zum Messen der Fragmentierung wird empfohlen, den von DBCC SHOWCONTIG zurückgegebenen Scandichtewert zu überwachen. Vollständig zusammenhängende Tabellen weisen eine Scandichte von 100 auf.

Reduzieren der Fragmentierung für eine Datenbank

Zur Reduzierung des Indexfragmentierungsgrads führen Sie die unter Defragmentieren von Windows SharePoint Services 3.0- und SharePoint Server 2007-Datenbanken (https://go.microsoft.com/fwlink/?linkid=110843\&clcid=0x407) in der Microsoft Knowledge Base beschriebene gespeicherte Prozedur aus.

Nachdem Sie den Fragmentierungsgrad der Datenbanken ermittelt haben, können Sie festlegen, dass die gespeicherte Prozedur in Abhängigkeit von Ihren Anforderungen und der allgemeinen Änderungsrate in Ihrer Umgebung täglich, wöchentlich oder monatlich ausgeführt wird. Im Allgemeinen wird empfohlen, mindestens einen wöchentlichen Defragmentierungszeitplan einzurichten. Außerdem wird empfohlen, Defragmentierungsvorgänge nach der Ausführung von DBCC CHECKDB REPAIR-Vorgängen einzuplanen.

Mit dieser gespeicherten Prozedur werden die Indizes von Inhaltsdatenbanken geändert. Änderungen an der gespeicherten Prozedur werden nicht unterstützt. Weitere Informationen zu den Änderungen, die bei Inhaltsdatenbanken für SharePoint-Produkte und -Technologien unterstützt werden, finden Sie unter Unterstützung von Änderungen an den Datenbanken, die von Office-Server-Produkten und Windows SharePoint Services verwandt werden (https://go.microsoft.com/fwlink/?linkid=110844\&clcid=0x407) in der Microsoft Knowledge Base.

Reduzieren der Fragmentierung für eine bestimmte Tabelle und deren Indizes

Wenn Sie nicht den Index einer kompletten Datenbank, sondern einer bestimmten Tabelle defragmentieren möchten, können Sie den Index neu anordnen oder neu erstellen. Weitere Informationen finden Sie unter Gruppierte Indexstrukturen (https://go.microsoft.com/fwlink/?linkid=128480\&clcid=0x407).

Die Neuanordnung eines Indexes bedeutet, dass die Blattebene des Indexes neu angeordnet wird. Bei der Neuanordnung des Indexes werden gruppierte und nicht gruppierte Indizes in Tabellen und Ansichten defragmentiert und komprimiert, wodurch die Indexscanleistung erheblich verbessert werden kann. Die Neuanordnung erfolgt stets online, damit die zugrunde liegende Tabelle für Benutzer verfügbar ist. Die Neuanordnung entspricht der DBCC INDEXDEFRAG-Anweisung von SQL Server 2000.

Die Neuerstellung eines Indexes bedeutet, dass der Index mit den gleichen Spalten, dem gleichen Indextyp, dem gleichen Eindeutigkeitsattribut und der gleichen Sortierreihenfolge neu erstellt wird. Durch die Neuerstellung wird die Leistung von Scan- und Suchvorgängen für Indizes verbessert. Sie können den Index für eine Tabelle online oder offline neu erstellen. Die Neuerstellung entspricht der DBCC DBREINDEX-Anweisung von SQL Server 2000.

Der Fragmentierungsgrad eines Indexes bestimmt die verwendete Defragmentierungsmethode und ob er online bleiben kann oder offline geschaltet werden sollte.

Fragmentierungsgrad Defragmentierungsmethode

Bis zu 10 %

Neu anordnen (online)

10 – 75 %

Neu erstellen (online)

mindestens 75 %

Neu erstellen (offline)

Beachten Sie, dass die Verwendung der Befehle DROP INDEX und CREATE INDEX für Datenbanken für SharePoint-Produkte und -Technologien nicht unterstützt wird.

Indizes können mit der ALTER INDEX-Anweisung von SQL Server 2005, dem Wartungs-Assistenten von SQL Server 2005, den Anweisungen DBCC INDEXDEFRAG und DBCC DBREINDEX von SQL Server 2000 oder dem Wartungs-Assistenten von SQL Server 2000 neu angeordnet und neu erstellt werden. In diesem Thema werden nur die Optionen von SQL Server 2005 ausführlich behandelt. Weitere Informationen zu Optionen von SQL Server 2000 finden Sie in den folgenden Ressourcen:

Verwenden von ALTER INDEX

Mit ALTER INDEX kann ein Datenbankadministrator Wartungsvorgänge für einen vorhandenen Tabellen- oder Ansichtsindex ausführen. Mithilfe dieser Anweisung können Indizes deaktiviert, neu erstellt und neu angeordnet werden oder optional Optionen für den Index festgelegt werden. ALTER INDEX ersetzt die Anweisungen DBCC DBREINDEX und DBCC INDEXDEFRAG.

In den meisten Fällen können Indizes neu erstellt werden, während die Datenbank online ist, da die Offlineneuerstellung der Indizes keine wesentlichen Vorteile bietet. Es gilt jedoch unbedingt zu beachten, dass bei der Neuerstellung eines Indexes die Tabelle mit einer gemeinsamen Tabellensperre versehen wird, wodurch die Ausführung aller Vorgänge mit Ausnahme von SELECT-Vorgängen verhindert wird. Für Datenbanken für SharePoint-Produkte und -Technologien werden gruppierte Indizes verwendet. Wenn ein gruppierter Index neu erstellt wird, wird die Tabelle mit einer exklusiven Sperre versehen, wodurch jegliche Zugriffe auf die Tabelle durch Endbenutzer verhindert wird.

Sie können das folgende Beispielskript anpassen, um alle Indizes in einer Tabelle neu zu erstellen.

USE Contoso_Content_1
GO
ALTER INDEX ALL ON [database_name. [ schema_name ] . | schema_name. ]table_or_view_name
REBUILD WITH (FILLFACTOR = 70, SORT_IN_TEMPDB = ON, ONLINE = ON,
STATISTICS_NORECOMPUTE = ON)
GO

Spezielle Überlegungen für die Berichtsdatenbank

Wir gehen davon aus, dass Kunden benutzerdefinierte Berichte basierend auf in der Berichtsdatenbank verfügbaren benutzerdefinierten Feldern und Daten implementieren. Deshalb sollten die folgenden bewährten Methoden für die T-SQL-Erstellung und Indexerstellung eingehalten werden, um eine skalierbare Lösung für die Leistungsberichterstellung sicherzustellen. Diese (dynamisch generierten) Tabellen werden von Office Project Server 2007 nicht außerhalb des Primärschlüssels indiziert. Das Infrastrukturupdate für Microsoft Office Server stellt zusätzliche Funktionalität bereit. Weitere Informationen finden Sie im Abschnitt zu RDS-Optimierungen für benutzerdefinierte Felder des herunterladbaren Artikels Project Server 2007-Infrastrukturupdate-Release für Server und Client (in englischer Sprache) (https://go.microsoft.com/fwlink/?linkid=121912\&clcid=0x407).

Wenn Sie sich an den Microsoft-Kundendienst und -Support wenden, werden Sie möglicherweise von einem Supporttechniker aufgefordert, zusätzlich erstellte Indizes zu entfernen oder zusätzliche Spalten, die vorhandenen Indizes hinzugefügt wurden, zu entfernen, Dies liegt daran, dass zusätzliche Indizes Datenzugriffspfade ändern und in bestimmten Situationen zu unerwarteten Problemen bei der Leistung und bei Sperren/Deadlocks führen können.

Festlegen des Füllfaktors für einen Server

Der Füllfaktor kann zur weiteren Optimierung der Datenspeicherung und Leistung von Indizes verwendet werden. Wenn Indizes erstellt oder neu erstellt werden, bestimmt der Füllfaktorwert (1 – 100) den Prozentsatz des Speicherplatzes auf jeder Seite auf Blattebene, der mit Daten gefüllt werden kann. Der verbleibende Speicherplatz ist für künftiges Wachstum reserviert. Für viele Situationen ist der standardmäßige serverweite Füllfaktor 0 optimal. Allerdings ist für Microsoft Office SharePoint Server 2007 eine serverweite Einstellung von 70 optimal, um das Wachstum zu unterstützen und die Fragmentierung zu minimieren.

Es ist zwar möglich, den Füllfaktor für einzelne Tabellen oder Indizes festzulegen, aber davon wird abgeraten.

Zum Anzeigen des Füllfaktorwerts eines oder mehrerer Indizes rufen Sie die sys.indexes-Katalogsicht ab. Weitere Informationen zu dieser Sicht finden Sie unter sys.indexes (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=128510\&clcid=0x407).

Zum Konfigurieren des serverweiten Füllfaktorwerts verwenden Sie die gespeicherte Systemprozedur sp_configure. Weitere Informationen finden Sie unter spconfigure (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=128512\&clcid=0x407).