Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Brent Ozar erläutert die interne und externe Fragmentierung von SQL Server

Laut Microsoft SQL Master Brent Ozar hat er im Laufe seiner Karriere einige schreckliche Entscheidungen zur Optimierung der Datenbankleistung getroffen. Zum Glück können wir von seinen Fehlern profitieren und müssen nicht alles alleine herausfinden. Er hat sein hart erarbeitetes Wissen kostenlos während der Webcast-Reihe „Quest’s Database Training Days“ geteilt.

In einer seiner Sitzungen haben wir gelernt, „Warum die Defragmentierung Ihrer Indizes nicht hilft“. Tatsächlich könnte es Ihre Datenbankleistung verschlechtern, und Brent hat uns erklärt, warum. Dabei betonte er, wie wichtig es ist, zu wissen, was man misst, wenn es um die Optimierung der SQL Server-Leistung geht.

Interne vs. externe Fragmentierung

Brent gab uns ein kurzes Tutorial darüber, wie SQL Server Daten in 8-KB-„Seiten“ speichert. In einem neuen oder neu erstellten Index sind alle Seiten voll und werden der Reihe nach gespeichert. Aber je mehr Daten hinzugefügt werden, desto mehr Seiten werden aufgeteilt:nicht alle Seiten sind voll und sie erscheinen in der falschen Reihenfolge. Dies ist der wesentliche Unterschied zwischen interner und externer Fragmentierung:

  • Externe Fragmentierung – bezieht sich auf Seiten, die nicht in Ordnung sind
  • Interne Fragmentierung – bezieht sich auf den leeren Bereich auf einer Seite

Fokus auf weniger On-Page-Splits

Viele Datenbankprofis konzentrieren sich auf Seitenteilungen als Maß für die Datenbankfragmentierung, Brent erklärte jedoch, dass diese Zahl bedeutungslos ist, da Seitenteilungen sowohl beim Hinzufügen einer neuen Zeile zu einer leeren Tabelle als auch beim Hinzufügen einer neuen Seite auftreten. Es ist also doch nicht hilfreich.

Wie externe Fragmentierung die Dinge verschlimmern kann

In dieser Sitzung behauptete Brent, dass die externe Fragmentierung kein nützliches Maß für die Datenbankleistung ist, da die Seitenreihenfolge keinen großen Einfluss auf die Geschwindigkeit von Wartungsaufgaben, das Ausführen von Abfragen im RAM oder das Lesen von Daten von der Festplatte hat. Datenbankexperten, die versuchen, die externe Fragmentierung durch Neuorganisation und Neuerstellung von Indizes zu beheben, verschlechtern die Leistung tatsächlich, indem sie Backups aufblähen und mehr Zeit für Wartungsfenster verbrauchen.

Datenbankprofis, die versuchen, die externe Fragmentierung zu reduzieren, indem sie durch Festlegen eines Füllfaktors Platz auf den Seiten lassen, verursachen ebenfalls ein Problem, das schlimmer ist als das, das sie zu beheben versuchen. Dies liegt vor allem daran, dass Sie fast nie Daten an einem Punkt mitten im Index einfügen müssen. Der Versuch, die Seiten in Ordnung zu halten, indem man weniger Daten auf jede einzelne Seite legt, verursacht also tatsächlich eine interne Fragmentierung.

Überwachung der Wartezeit

Was sollten Sie stattdessen tun? Brent empfiehlt, den Füllfaktor auf den Standardwert von 100 % (oder mindestens 80 % oder höher) zu setzen und dann die Indizes neu zu erstellen, um sie erneut zu packen. Konzentrieren Sie sich als Nächstes auf die Überwachung der richtigen Performance-Tuning-Nummer – Wartezeit. Eine der besten Möglichkeiten, verschiedene Aspekte der Wartezeit in Ihren Datenbankinstanzen anzuzeigen, ist die Verwendung eines Leistungsüberwachungstools, um genau festzustellen, wo Prozesse ins Stocken geraten.

Wenn Sie noch mehr von Brents Einblicken in die Indexfragmentierung, Wartezeitstatistiken und was Sie bei der Indexpflege tun sollten, hören Sie sich den On-Demand-Webcast an.

Sie können auch über die Datenbankschulungstage von Quest auf weitere Expertenratschläge zur Datenbankleistung zugreifen.