Wir haben eine SQL Server-Instanz, die für die E-Mail-Archivierung verwendet wird (mit freundlicher Genehmigung eines Archivierungspakets eines Drittanbieters). Von Zeit zu Zeit wird die Software auf eine neue leere Datenbank übertragen. Wir haben dies in der Vergangenheit vierteljährlich gemacht, aber wir versuchen es jetzt monatlich. Die zu archivierende Datenmenge beträgt etwa 15 bis 20 GB pro Monat, und der Großteil der Daten befindet sich nur in einer Handvoll Tabellen (normalerweise 2 bis 4).
Sobald wir zu einer neuen Datenbank wechseln, wird die alte Datenbank nur noch schreibgeschützt verwendet. Was ich tun möchte, ist, es in eine schöne, enge Datendatei zu optimieren, wobei alle Tabellen / Indizes zusammenhängend sind und einen sehr hohen Füllfaktor haben und am Ende der Datendatei nicht viel Leerraum vorhanden ist. Außerdem verwenden wir auf diesem Server die Standard Edition mit allen damit verbundenen Einschränkungen (andernfalls würde ich bereits die Datenkomprimierung verwenden).
Einige Möglichkeiten, die mir einfallen:
- REBUILD / REORGANIZE-Indizes, DBCC SHRINKFILE (Okay, dies ist keine sinnvolle Option, da DBCC SHRINKFILE die Pisse aus allem herausfragmentiert, was sie berührt, aber ich füge sie der Vollständigkeit halber hinzu.)
- Erstellen Sie eine neue Datenbank mit deaktivierten automatischen Statistiken. Schreiben Sie alle Tabellen aus der Quellendatenbank und erstellen Sie sie neu. Verwenden Sie bcp, um die Daten in der Reihenfolge der Clusterschlüssel in die neue Datenbank zu exportieren / importieren. Skript und erstellen Sie alle Indizes neu. Berechnen Sie alle Statistiken mit vollständigem Scan neu.
- Erstellen Sie eine neue Datenbank mit deaktivierten automatischen Statistiken. Schreiben Sie alle Tabellen aus der Quellendatenbank und erstellen Sie sie neu. Verwenden Sie SSIS oder T-SQL, um Daten in die neue Datenbank zu übertragen. Skript und erstellen Sie alle Indizes neu. Berechnen Sie alle Statistiken mit vollständigem Scan neu.
Der letzte Schritt wäre in jedem Fall, die Datenbank in den schreibgeschützten Modus zu versetzen.
Welche anderen guten / besseren Möglichkeiten gibt es dafür? Mein Anliegen ist es, die Daten so zu verschieben, dass ein hoher Füllfaktor erhalten bleibt und logisch zusammenhängend ist.
Bearbeiten:
Ich sollte erwähnen, dass ungefähr 75% der Daten in Bildspalten (LOB) gespeichert zu sein scheinen.
PRIMARY
?Antworten:
Um die physische Fragmentierung in den Dateien zu beseitigen, können Sie den Clustered-Index mit dem vorhandenen Drop in eine neue Dateigruppe verschieben. Da es sich um RO handelt, müssen sie alle zu 100% gefüllt sein, da kein Platz für Einfügungen benötigt wird. Seitensplits werden durch Aktualisierungen verursacht.
Auf diese Weise können Sie auch eine stückweise Wiederherstellung durchführen und die Datenbank sehr schnell online stellen, wenn Sie sich jemals für Enterprise entschieden haben. Enterprise erlaubt auch Columnstore-Indizes und reduziert die Abfragezeit für diese schreibgeschützten Daten massiv.
Sie können die Option "Shrinkfile" einmal verwenden, bevor Sie ohne ernsthafte Probleme mit der Fragmentierung auf "Nur Lesen" umschalten, um den gewünschten Speicherplatz am Ende der Datei zu entfernen.
Nebenbei bemerkt, überprüfen Sie einfach, ob Sie die neuesten Datentypen für Ihre LOBS verwenden. dh nvarchar (max) oder varchar (max) anstelle von ntext oder text, varbinary (max) anstelle von image?
quelle
Ich hatte ein ähnliches Problem mit einem Drittanbieter-Tool, das ebenfalls einen Bilddatentyp zum Speichern unstrukturierter Daten verwendete, und ich löste es, indem ich die Spalte für die Verwendung von Dateistream konvertierte . Sie müssen einige Tests durchführen, um sicherzustellen, dass die App weiterhin wie erwartet funktioniert. Auf diese Weise können Sie jedoch Ihren eigenen Archivierungsprozess schreiben, der Ihre Daten auf effiziente Weise in eine Archivdatenbank verschiebt.
quelle