Wir haben einige Datenbanken mit einer Indexfragmentierung von> 95%. Soweit ich weiß, wurden die Indizes noch nie neu erstellt und noch nie weniger neu organisiert. In Jahren.
(Um fair zu sein, scheinen für diese Tabellen automatisch aktualisierte Statistiken aktiviert zu sein. Um fair zu sein, kümmert er sich auch gewissenhaft um Sicherungen: stündlich vollständige tägliche und TRX-Protokolle.)
Als ich fragte, sagte der DBA, er zögere, die Indizes neu zu erstellen oder neu zu ordnen. Als ich fragte, warum, konnte er es nicht wirklich artikulieren. Schließlich sagte er, er sei besorgt über einen möglichen Datenverlust. Zum Beispiel wird eine der Datenbanken von unserer Buchhaltungsanwendung Great Plains Dynamics verwendet, und er schien diesbezüglich sehr besorgt zu sein.
Ich bin kein DBA, aber nach dem, was ich gelesen habe, scheint seine Angst ... für mich schwer zu verstehen.
Ich bin mir nicht sicher, was ich als nächstes tun soll. Vorschläge, wie ich vorgehen soll?
quelle
Antworten:
Das Neuerstellen eines Datenbankindex sollte keinen Datenverlust verursachen. Dies führt jedoch wahrscheinlich zu einer erheblichen Verschlechterung der Leistung, da die neu erstellten Indizes normalerweise erst nach Abschluss der Neuerstellung zur Verwendung zur Verfügung stehen. Aus diesem Grund sollte dies außerhalb der Geschäftszeiten erfolgen, wenn die betroffenen Systeme inaktiv sind.
Paranoia ist eine gute Sache in einem DBA - Wenn sie sich Sorgen um Datenverlust machen, lassen Sie sie die Backups ordnungsgemäß testen (stellen Sie sie auf einem separaten System wieder her und stellen Sie sicher, dass alle Daten vorhanden sind) und ob sie es sind Es wäre eine vernünftige Vorsichtsmaßnahme, eine vollständige Sicherung durchzuführen, bevor die Indizes neu erstellt werden.
quelle
WITH (ONLINE=ON)
REINDEX
"vorbeugende Wartung" von Tabellen, bei denen sich der Indexinhalt stark ändert, ist hübsch nach meiner erfahrung üblich (wenn der index überwiegend statisch ist, ist das wenigerEs besteht kein Risiko eines Datenverlusts durch Neuerstellen oder Defragmentieren von Indizes.
quelle
Das Reorganisieren der Indizes nimmt weniger Zeit in Anspruch und erfordert weniger Aufwand vom SQL Server, sodass sie in Instanzen vom Typ "weeknight" ausgeführt werden können. Wenn Sie das, was Sie sagen, als wahr bezeichnen, kann das Reorganisieren der noch nie dagewesenen Indizes auch größere Auswirkungen auf den Server haben. Das Neuerstellen der Indizes erfordert einen erheblichen Aufwand für den SQL Server, da sie gelöscht und neu erstellt werden. Eine Wiederherstellung an einem Wochentag ist nicht das Risiko wert, dass der Server mit Indizes beschäftigt ist und die Benutzer nicht bedient.
Ich stimme voretaq7 zu, wenn er sich solche Sorgen um die Arbeit mit Indizes macht, probiere es zuerst auf den Entwicklungs- oder Testservern aus, um zu sehen, wie die reagieren.
quelle
DROP INDEX
und neu zu definieren.CREATE INDEX
Ich bin mir jedoch nicht sicher, aber ich weiß, dass PostgreSQL es manchmal besser macht, einen Index wegzublasen und von vorne zu beginnen, als ihn neu zu erstellen (REINDEX
).