Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Server: Performance-Optimierung

Wartung von Indizes

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Dieses Video zeigt, welche Möglichkeiten für die Wartung von Indizes existieren und wann welcher Ansatz der korrekte ist. Zudem werden Wege der Automatisierung mittels Wartungsplänen vorgestellt.
06:51

Transkript

Indexes fragmentieren, das bedeutet immer, wenn ich irgend eine Art eine Veränderung mache an den Daten, die sich dann auch in dem Index widerspiegeln müssen, bedeutet das, dass ich eine Chance habe, dass die Datenstrukturen des Index fragmentieren, das heißt quasi aus fleddern. Es ist so, dass die einzelnen Seiten nicht mehr in optimaler Reihenfolge liegen, dass möglicherweise mehr (inaudible) durchgeführt werden müssen als unbedingt notwendig und das Ganze geht mit der Dauer auf die Performance der Indexes. Deshalb gibt es die Regel, Indexes regelmäßig zu warten, sprich eine Defragmentierung durchzuführen und da habe ich mehrere Möglichkeiten. Ich kann einen Index reorganisieren mit Alter Index...Reorganize und das bedeutet, dass in der bestehenden Speicherstruktur in der Datenbank die einzelnen Einträge des Index quasi neu sortiert werden. Das ist relativ schnell gemacht. Das hängt natürlich von der Größe des Indexes ab. Es ist aber nicht ganz so 100% sauber. Deshalb gibt es ein Rebuild, das heißt, wenn es richtig unordentlich in der Datenbank ist, eine richtig große Fragmentierung stattgefunden hat im Index, dann kann ich den Index einfach neu aufbauen an der Stelle. Das dauert ein bisschen länger, da habe ich etwas höheren Ressourcenverbrauch. Dafür steht der Index, am Schluss, aber wieder wie eine Eins da und die Fragmentierung dürfte sich ziemlich genau =0 betragen. Die nächste Möglichkeit, die ich habe: Ich kann natürlich einen Index quasi neu anlegen, das Create Index With Drop_Existing. Damit habe ich die Möglichkeit zu sagen: OK, ich lösche den eigentlichen Index, lege den neu an und beim Anlegen lösche ich den Index und habe dann wirklich einen brandneuen Index an der Stelle. Und der ist natürlich relativ gut und auch da ist die Fragmentierung relativ niedrig. Das heißt, letztendlich ist die Aufgabe, die Fragmentierung relativ niedrig zu halten, was natürlich die Frage aufwirft, wie kriege ich heraus, wir stark ist meine Tabelle, beziehungsweise mein Index für die Tabelle fragmentiert ist. Und letztendlich gibt es dafür eine recht keine Abfrage, mit der ich das heraus finden kann. Und je nach dem, wie stark die Fragmentierung ist, gilt es da eine Entscheidung zu treffen. Microsoft gibt unterschiedliche Werte an, was denn da optimal wäre. Mal ist es von 5% manchmal von 15% Fragmentierung die Rede. Ich denke mal, die Wahrheit liegt in der Mitte. Damit fährt man ganz gut bei vielen Datenbanken. Das heißt, wenn ich eine Fragmentierung habe, die unter 10 % ist, wenn ich eine sehr kleine Tabelle habe, dann können Sie schlicht und ergreifend nichts machen. Ja, die Tabelle ist nicht besonders groß, das heißt, selbst wenn der Index nicht ganz optimal ist, die Performance sollte schon in Ordnung gehen. Dann kann die Fragmentierung zwischen 10% und 30% betragen und dann wäre ein Reorganize durchaus das Richtige, was Sie machen können und nur wenn die Fragmentierung mehr als 30% ist, wür de ein Rebuild oder ein Neuanlegen des Index das Richtige sein an der Stelle. Schließlich zeige ich Ihnen, wie Sie herausfinden können, wie Sie einen Index reorganisieren können, neu bauen können, wie Sie herausfinden können, wie stark die Fragmentierung ist und der Schritt, der dann darauf folgt, wird sein, wie kann ich das Ganze automatisieren, weil ich vermute, dass Sie nicht große Lust verspüren jeden Tag die Indexes Ihrer Datenbank durchzugehen und van Hand die einzelnen Aktionen durchzuführen. So ich habe im SQL Server Management Studio schon das entsprechende Skript geöffnet. Es geht über Sys - Tables, damit habe ich erstmal eine Zugriff auf alle möglichen Tabellen in meiner Datenbank. Dann geht es über die DMV, dm_db_index_physical stats. Die liefert mir Informationen, wie stark ein Index fragmentiert ist und das ist auch genau der Kern, den ich benötige. Das ist eine Funktion und der kann ich eine Reihe von Parametern übergeben, also genau nach der Tabellenwertfunktion insofern wirklich mit cross apply quasi in die Abfalle eingebunden und left join auf die EC selber gibt mir dann die Möglichkeit herauszufinden, wie viele Zeilen ich denn überhaupt habe in der einzelnen Tabelle, beziehungsweise einzelnen Index und damit kann ich das Bild abrunden. Wen ich das offen lasse, das Statement, dann werden Sie sehen, welche Anzahl von Zeilen, wie die Fragmentierung aussieht in Prozent, das heißt, die Funktion ist nahe 0 an der Stelle und ich sehe die Tabelle und den Namen des Index. Das heißt, wenn ich jetzt hingehen würde testweise, auf die Produkt Verzeichnis ClusteredIndex Tabelle, noch einen zweite Index anzulegen, so haben wir es, ClusteredIndex, hier hingehen, zweiten Index annehmen, keinen zweiten ClusteredIndex natürlich, aber einen Non-ClusteredINdex über... das hatten wir gerade gehabt, ERN und Bezeichnung, so, und wählen. Während er sich bemüht es anzulegen, klicke ich hier im Hintergrund, wenn ich gleich die Abfrage nochmals ausführe, werden Sie sehen, dass die Tabelle natürlich zweimal auftaucht mit genau zwei unterschiedlichen Indexes an dieser Stelle und beide könne verschiedene Arten von Fragmentierungen aufweisen und Sie sehen, in der Tat, es weicht ein bisschen ab. Also es ist nicht genau 0, aber ich würde definitiv mal sagen, dass es 0 ist. Nah genug dran, um es als solches zu bezeichnen. Ich sehe hier die Anzahl der Zeilen und das sind so die Information mit der ich dann loslaufen kann und hier einzeln Indexes in der Tat wirklich dann warten. Ich könnte hier jetzt hingehen und sagen rechte Maustaste, auf ein Index meiner Wahl und habe die Möglichkeit ein Rebuild oder Reorganize durchzuführen und damit würde der SQL Server das an dieser Stelle durchführen. Zum Beispiel, testweise ein Reorganize, jetzt kommt dieser Dialog, wenn Sie möchten können Sie das Ganze Skripten. Auch das funktioniert wieder. Sie können auch hingehen und das Skript, zum Beisiel, direkt als Job für den SQL Server Agent Skripten und das bedeutet im Wesentlichen, dass wir sagen können. Hey, ich möchte das ausführen, aber nicht sofort, sondern heute abend um 21 Uhr. Sie müssen bedenken, wenn Sie den Index neu aufbauen, steht der erstmal nicht zur Verfügung und es kann natürlich zu Laufzeiten ein Problem darstellen, besonders wenn es ein ClusteredIndex ist. Dann steht die Tabelle für eine gewisse Zeit in der Anwendung nicht zur Verfügung und ich könnte mir vorstellen, dass die eine oder andere Anwendung das nicht mit Humor verstehen würde an der Stelle. Das heißt, hier kann ich also ganz einfach, jeden einzelne Index entweder neu bauen oder reorganisieren. Wir können interessanterweise auch deaktivieren, was im Wesentlichen aber nur bedeutet, dass er nicht mehr funktional ist, dass aber die Struktur, die Definition in der Datenbank bleibt und ich kann dann letztendlich den neu anlegen, beziehungsweise ein Rebuild machen, damit habe ich wieder einen aktiven Index an der Stelle. Das kann man mache in besonderen Fällen, das soll jetzt hier aber nicht der Schwerpunkt sein, so ein besonderer Fall wäre, wenn ich sehe, der Index ist absolut kontraproduktiv. Ich bin mir aber nicht ganz sicher, ob ich ihn löschen möchte, kann ich ihn quasi disabeln an der Stelle. Wie gesagt, wichtig hier, Sie können Rebuild, Reorganize durchführen.

SQL Server: Performance-Optimierung

Lernen Sie den Umgang mit Indizis und Tools, um die Leistungsfähigkiet Ihrer SQL Server Datenbank effektiv zu erhöhen.

3 Std. 20 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:04.05.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!