Wir haben mehrere Computer, auf denen wir die Größe des Transaktionsprotokolls vorab auf 50 GB festgelegt haben. Die Größe der Tabelle, die ich neu organisieren möchte, liegt zwischen 55 und 60 GB, wird aber kontinuierlich zunehmen. Der Hauptgrund, den ich neu organisieren möchte, besteht darin, Speicherplatz freizugeben, und jeder Leistungsvorteil, der sich daraus ergibt, ist ein zusätzlicher Bonus.
Der Fragmentierungsgrad der Tabelle beträgt 30 - 35%. Auf einigen dieser Maschinen erhalte ich den Fehler "Transaktionsprotokoll voll" und die Reorganisation schlägt fehl. Die Transaktionsprotokollgröße erreicht bis zu 48 GB. Was ist ein guter Weg, um dem entgegenzuwirken? Wir haben keine automatische Inkrementierung aktiviert, und ich zögere, dies zu tun.
Ich kann die Protokollgröße auf einen größeren Wert erhöhen, aber da die Tabellengröße in Zukunft zunimmt, reicht der Wert möglicherweise nicht aus. Außerdem wird der Zweck einer Neuorganisation, um Speicherplatz freizugeben, außer Kraft gesetzt, wenn die Protokollgröße gleichermaßen erhöht wird. Irgendwelche Ideen, wie ich dem effektiv entgegenwirken kann? Die Verwendung des Bulk-Modus ist keine Option, da ein Datenverlust nicht akzeptabel ist.
quelle
REORGANIZE (wie in ALTER INDEX ... REORGANIZE) ist eine sehr schnelle Operation (meistens ...), die wenig Protokoll erfordert, jederzeit unterbrochen und später fortgesetzt werden kann und intern in kleinen Batch-Transaktionen ausgeführt wird :
Sind Sie sicher, dass Sie nicht über einen Umbau sprechen ? Ein Index REBUILD ist langsam, teuer, verbraucht eine enorme Menge an Protokoll (wenn er nicht offline ist und nicht minimal protokolliert werden kann, kann ein Online-Neuaufbau nicht minimal protokolliert werden), ist eine einzelne große Transaktion und kann nicht unterbrochen werden, ohne die gesamte Arbeit zu verlieren.
Es scheint mir, dass Sie gerade einen Umbau durchführen. Dies ist eine wirklich außergewöhnliche Operation, die Sie nicht durchführen sollten, es sei denn, Sie haben sehr gute Gründe. Auf welche Art von Raumrückgewinnung hüpfen Sie? Irgendetwas,
DBCC CLEANTABLE
das nicht geht? Haben Sie die physische Struktur der Tabelle überprüft, ist sie von der logischen Struktur abgewichen ( Details finden Sie in den SQL Server-Tabellenspalten unter der Haube )?Wenn Sie den Tisch wirklich neu aufbauen müssen, haben Sie leider keine andere Wahl, als die Kugel zu beißen und das erforderliche Protokoll zuzuweisen. Lass es nicht automatisch wachsen, es verlangsamt nur den Prozess. Wachsen Sie es auf das 2,5-fache der Tischgröße vor.
Wenn die Tabelle partitioniert ist, können Sie offline jeweils eine Partition neu erstellen (und neu organisieren). Online-Neuerstellungen können nur auf der gesamten Tabellenebene durchgeführt werden.
quelle
Ich hatte dieses Problem schon einmal.
Dies ist etwas kontraintuitiv, da Sie wissen, dass bei einem Abbruch der Reorganisation die Transaktion an der Stelle fortgesetzt werden kann, an der sie aufgehört hat.
Hier ist was du tust. Es ist etwas lang, aber unkompliziert.
Erstellen Sie eine Agent-WMI-Warnung ('Relief Valve reorganisieren') für eine Leistungsbedingung.
Erstellen Sie einen Job ('Reorganize Check')
Testen Sie dies alles irgendwo, sogar in einer Entwicklungs-Sandbox, um sicherzustellen, dass es ordnungsgemäß funktioniert, bevor Sie es auf Ihren Produktionsserver kleben.
Was Sie sehen, ist, dass der "Reorganisieren" -Job startet und beginnt, das Protokoll zu füllen. Wenn das Protokoll einen prozentualen Füllstand erreicht, wird die WMI-Warnung (innerhalb von 30 Sekunden) ausgelöst, die Ihren anderen Job ausführt. Dabei wird festgestellt, dass der Job "Reorganisieren" ausgeführt wird und möglicherweise ein Fehler vorliegt. Anschließend wird "Reorganisieren" gestoppt, eine Sicherungskopie erstellt, bestätigt, dass der freie Speicherplatz für Protokolle wieder einen vernünftigen Wert aufweist, und anschließend wird der "Reorganisieren" -Job erneut gestartet, der dort fortgesetzt wird, wo er aufgehört hat.
In diesem Szenario können Sie die Größe Ihres Protokolls auf einen vernünftigen Wert einstellen, indem Sie die Anzahl der Schritte Wachstum / Trigger / Job / Stopp / Neustart verringern, damit es effizienter wird und auch genügend Speicherplatz für das Protokoll bleibt gelegentliche Wucherungen, die nicht rechtzeitig erfasst werden.
Dies ist eine Art seltsames Szenario. Ich bin mir ziemlich sicher, dass ich mich vor ein paar Jahren darüber hinweggesetzt hätte, und offensichtlich gibt es hier grundlegende Probleme. Wenn Sie sich jedoch mit Hunderten von Servern befassen, treten einige Randfälle wie diese auf, die aus geschäftlichen Gründen in keiner Weise behoben werden können, außer durch MacGyvering, eine temporäre Lösung, die die Aufgabe erledigt.
Solange es sicher, logisch, getestet und gut dokumentiert ist, sollte es kein Problem geben.
quelle
Dies ist, was ich normalerweise getan habe (ich habe auch ein paar Tabellen mit jeweils 80 + GB) für die Index-Neuorganisation (da die Index-Neuorganisation jederzeit gestoppt werden kann, ohne die vorherige Neuordnungsarbeit zu verlieren).
In meinem Indexpflege-Framework kategorisiere ich die Indizes in zwei Gruppen, eine für die Indexwiederherstellung und eine für die Indexwiederherstellung. Für die Indexwiederherstellung verwende ich einen etwas anderen Ansatz, da ich eine Indexwiederherstellungssitzung nicht anhalten möchte (wodurch ein Rollback verursacht wird und alle vorherigen Arbeiten verloren gehen). Wenn meine Überwachungssitzung während der Indexwiederherstellung feststellt, dass ein Szenario mit freiem Speicherplatz für die Protokolldatei belegt ist, erhöht die Überwachungssitzung die Protokolldatei automatisch vorab. aber später werde ich es fallen lassen) auf einem anderen Laufwerk (das Backup-Laufwerk)
quelle
Ich hatte das gleiche Problem wie der Frageautor, und wenn ich mir seine Kommentare ansehe, kann ich sagen, dass ich das gleiche Setup hatte. Während ich versucht habe, eine zu erstellen
REORGANIZE
, wird das Protokoll unabhängig von der Größe auf das Mehrfache der Größe der gesamten Tabelle erweitert.Das Problem wurde durch die Transaktionsreplikation verursacht . Anscheinend kann das Protokoll erst mit dem gesichert werden
REORGANIZE
Vorgang abgeschlossen ist. Ich habe irgendwo gelesen, dass es sich um ein bekanntes Problem von Microsoft handelt, bin mir aber nicht sicher, wo.Sobald ich die Transaktionsreplikation deaktiviert hatte, funktionierten die Protokollsicherungen wieder normal und alle 30 Sekunden wurden Protokollsicherungen durchgeführt, während die Reorganisation für mich erfolgreich war.
quelle
Ich gehe davon aus, dass Sie etwas in der Art von:
ALTER INDEX ON REORGANIZE
Leider gibt es keine Möglichkeit, eine teilweise Organisation auszuführen (wie Sie beispielsweise eine Protokolldatei teilweise verkleinern können). Die Möglichkeiten, wie ich diese Probleme betrachten kann, sind:
1) Versetzen Sie die Datenbank in den einfachen Wiederherstellungsmodus, während Sie die Reorganisation ausführen. Dies ist jedoch nicht akzeptabel
2) Partitionieren Sie den Index. Wenn Sie eine Möglichkeit finden, den Index zu partitionieren, um ungefähr gleich große Partitionen zu erhalten, können Sie jede Partition unabhängig neu organisieren (oder mit der Online-Option neu erstellen) und so das Wachstum der Protokolldateien begrenzen
Ich bin sicher, dass Sie dies tun, aber wenn Sie dies nicht tun, möchten Sie möglicherweise eine Protokolldateisicherung initiieren, bevor und nachdem Sie Indexoptimierungen vorgenommen haben, damit der verwendete Speicherplatz wieder freigegeben werden kann.
quelle