In letzter Zeit habe ich nicht nur Dateien vergrößert, wenn sie fast 80% der Dateien ausgelastet sind, sondern auch proaktiver Speicherplatz mithilfe der üblichen Tricks wie Defragmentieren von Heaps, Hinzufügen und Löschen von Clustered-Indizes, Implementieren der Zeilen- oder Seitenkomprimierung usw. zurückgewonnen.
Es gibt jedoch einige Fälle, in denen ich durch Ausführen von DBCC CLEANTABLE noch mehr Speicherplatz zurückgewinnen konnte . Bei Hunderten von Datenbanken in meiner Umgebung ist es nicht möglich zu wissen, was Benutzer in den einzelnen Datenbanken tun, und es ist völlig akzeptabel, dass Änderungen vorgenommen werden, bei denen Spalten mit fester Länge gelöscht werden. Ich habe diese Möglichkeiten normalerweise gefunden, indem ich mir die Anzahl der Zeilen und Seiten in einigen von mir geschriebenen Skripten zur Nutzung des Objektbereichs angesehen habe. Ich möchte noch einen Schritt weiter gehen und versuchen, die Erkennung solcher Szenarien zu automatisieren.
Was ich gerne wissen würde, ist, ob jemand da draußen aktiv nach solchen Möglichkeiten sucht und wenn ja, wonach suchen Sie konkret?
Meine Gedanken waren, etwas in die Richtung zu schreiben, wie die maximale und minimale Größe einer Zeile, die Anzahl der Zeilen in der Tabelle, die Anzahl der zugewiesenen Seiten und die Anzahl der verwendeten Seiten erfasst werden, und dann einige grundlegende Berechnungen durchzuführen, um die Ergebnisse zu protokollieren sind weit außerhalb dessen, was "erwartet" werden würde.
quelle
Antworten:
Die Lösung für dieses Problem besteht darin, wöchentlich einen Job auszuführen, der sp_spaceused für alle Tabellen in einer Datenbank ausführt und diese Daten in einer Tabelle speichert. Wenn es Größenunterschiede für jede Tabelle gibt, die größer als 10% sind, würde ich den dbcc cleantable ausführen.
Mein Code zum Durchlaufen von Tabellengrößen sieht folgendermaßen aus:
Jetzt müssen Sie nur noch die Logik erstellen, die überprüft, wie sich die Größe im Laufe der Woche ändert, und sie planen.
quelle