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


28

Nach der Suche im Internet konnte ich den Grund 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 organisieren?

In einem Artikel auf einer Website heißt es:

Der Index sollte neu erstellt werden, wenn die Indexfragmentierung mehr als 40% beträgt. Der Index sollte neu organisiert werden, wenn die Indexfragmentierung zwischen 10% und 40% liegt. Der Prozess der Indexwiederherstellung beansprucht mehr CPU und sperrt die Datenbankressourcen. Die SQL Server-Entwicklungsversion und die Enterprise-Version verfügen über die Option ONLINE, die aktiviert werden kann, wenn der Index neu erstellt wird. Die ONLINE-Option hält den Index während des Neuaufbaus verfügbar.

Ich konnte das nicht verstehen, obwohl es sagt, dass dies WHENzu tun ist, aber ich möchte wissen, WHYmüssen wir Indizes neu erstellen und neu organisieren?


1
Dies ist die Frage nach dem Warum und hier die Frage nach dem Wann .
Nick Chammas

Antworten:


28

Beim Aktualisieren und Löschen von Einfügungen 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 Durchsuchen 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 E / A, 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 zusammen. Dies 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 einen kleinen Teil der externen Fragmentierung entfernen. Es ist eine leichtere Operation als der Wiederaufbau und ist immer online.

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

Bitte rechnen Sie jedoch nicht mit einer Fragmentierung von 0 nach einem Rebuild. Sofern Sie keinen MAXDOP-Abfragehinweis verwenden, wird der Neuerstellungsvorgang von SQL Server parallelisiert. Je mehr Prozessoren beteiligt sind, desto größer ist wahrscheinlich die Fragmentierung, da jeder Prozessor oder Kern seinen Abschnitt oder sein Fragment des Index unabhängig von den jeweiligen Faktoren neu erstellt gegenseitig. Dies ist ein Kompromiss zwischen der besten Fragmentierungsstufe 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.


Groß...! Einfach erklärt ...!
DineshDB

0

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

Unter folgendem Link erhalten Sie detaillierte Informationen zur Fragmentierung und zur Funktionsweise des Neuaufbaus und der Neuorganisation von Indizes (oder der Neuorganisation von Indexseiten): https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
Diese Informationen sind (teilweise) veraltet, nachdem sie
angezeigt wurden.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.