it-swarm.com.de

Warum müssen wir Indizes in SQL Server neu erstellen und neu organisieren?

Nachdem ich im Internet gesucht hatte, konnte ich den Grund dafür nicht finden

  1. Warum müssen wir Indizes in SQL Server neu erstellen und neu organisieren?

  2. was passiert intern, wenn wir neu aufbauen und neu organisieren?

Ein Artikel auf einer Site sagt:

Der Index sollte neu erstellt werden, wenn die Indexfragmentierung größer als 40% ist. Der Index sollte neu organisiert werden, wenn die Indexfragmentierung zwischen 10% und 40% liegt. Der Indexwiederherstellungsprozess benötigt mehr CPU und sperrt die Datenbankressourcen. Die SQL Server-Entwicklungsversion und die Enterprise-Version verfügen über die Option ONLINE, die beim erneuten Erstellen des Index aktiviert werden kann. Die Option ONLINE hält den Index während der Neuerstellung verfügbar.

Ich konnte das nicht verstehen, obwohl es besagt, dass WHEN, um dies zu tun, aber ich würde gerne wissen, WHY müssen wir Indizes neu erstellen und neu organisieren?

28
Mourya

Während Sie Einfügungsaktualisierungen und -löschungen durchführen, werden Ihre Indizes sowohl intern als auch extern fragmentiert.

Interne Fragmentierung bedeutet, dass Sie einen hohen Prozentsatz an freiem Speicherplatz auf Ihren Indexseiten haben. Dies bedeutet, dass SQL Server beim Scannen des Index mehr Seiten lesen muss.

Externe Fragmentierung tritt auf, wenn die Seiten des Index nicht mehr in Ordnung sind, sodass SQL Server mehr Arbeit leisten muss, insbesondere in Bezug auf IO), um den Index zu lesen.

Wenn Ihre Indizes zu fragmentiert werden, sind Ihre Abfragen bestenfalls weniger effizient, aber im schlimmsten Fall verwendet SQL Server die Indizes nicht mehr alle zusammen, was bedeutet, dass praktisch alle Abfragen einen Tabellenscan oder einen Clustered-Index-Scan durchführen müssten. Dies wird Ihre Leistung sehr beeinträchtigen!

Wenn Sie einen Index neu organisieren, verwendet SQL Server die vorhandenen Indexseiten und mischt nur die Daten in diesem Alter. Dies verringert die interne Fragmentierung und kann auch eine kleine Menge externer Fragmentierung entfernen. Es ist leichter als der Wiederaufbau und immer online.

Wenn Sie einen Index neu erstellen, sortiert SQL Server die Daten des Index tatsächlich neu und verwendet einen neuen Satz von Indexseiten. Dies verringert offensichtlich sowohl die interne als auch die externe Fragmentierung, ist jedoch eine schwerere Operation und führt standardmäßig dazu, dass der Index offline geschaltet wird, obwohl er abhängig von Ihrer SQL Server-Version und Ihren Einstellungen als Online-Operation ausgeführt werden kann.

Erwarten Sie jedoch nach einem Rebuild keine 0-Fragmentierung. Wenn Sie keinen MAXDOP-Abfragehinweis verwenden, wird SQL Server den Wiederherstellungsvorgang parallelisieren. Je mehr Prozessoren beteiligt sind, desto stärker ist die Fragmentierung wahrscheinlich, da jeder Prozessor oder Kern seinen Abschnitt oder sein Fragment des Index einzeln neu erstellt, ohne Rücksicht darauf gegenseitig. Dies ist ein Kompromiss zwischen den besten Fragmentierungsstufen und der Zeit, die für die Neuerstellung des Index benötigt wird. Verwenden Sie für eine Fragmentierung nahe 0 MAXDOP 1 und sortieren Sie die Ergebnisse in TempDB.

29
Pete Carter

Um Fragmentierung zu entfernen, die Probleme wie Langsamkeit auf Datenbankebene/lang laufende Abfragen usw. verursacht.

Weitere Informationen zur Fragmentierung und zur Funktionsweise der Neuerstellung und Reorganisation von Indizes (oder zur Reorganisation von Indexseiten) finden Sie unter folgendem Link: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation