Sie haben guten Grund zur Sorge, da die DB in SQL Server häufig "saugt". Paul Randal, der Leiter der Storage Engine in SQL 2005, erklärte, ShrinkDB sei sehr schlecht geschrieben. Es findet leeren Speicherplatz, indem es die Daten ganz am Ende nimmt und ganz am Anfang platziert und dies so lange tut, bis am Ende der DB-Dateien freier Speicherplatz vorhanden ist. Zu diesem Zeitpunkt kann der Speicherplatz dann von SQL Server freigegeben und an das Betriebssystem zurückgegeben werden. Sie kehren Ihre Datenbankdateien effektiv um, sodass Sie normalerweise eine massive Fragmentierung feststellen. Sie können über seine Ansichten in diesem Blog-Beitrag oder in diesem MCM Internals-Video lesen
Wie bei allem müssen Sie diese zuerst in Ihrer Umgebung testen. Eine bessere Möglichkeit besteht darin, Daten in eine andere Dateigruppe zu verschieben. Sie können eine Online-Indexwiederherstellung mit dem Clustered-Index durchführen und anschließend in der neuen Dateigruppe neu indizieren. Dann können Sie den alten fallen lassen und den Raum freigeben und haben fast keine Fragmentierung. Beachten Sie, dass dies etwa 120% zusätzlichen Speicherplatz beansprucht, während es durchgearbeitet wird. Das Problem dabei ist, dass Sie sogar zusätzlichen freien Speicherplatz benötigen, den Sie möglicherweise nicht haben. Dies ist eine Unternehmensfunktion.
Wenn der freie Speicherplatz so teuer ist, müssen Sie möglicherweise in die Kugel beißen und die Datenbank langsam um einen kleinen Teil verkleinern, um lang laufende Prozesse zu vermeiden. Beachten Sie, dass Ihre Daten stark fragmentiert sind und Sie alles erneut indizieren möchten. Beachten Sie, dass Sie nach der Neuindizierung alles Ihren genutzten Speicherplatz ein wenig vergrößern und wieder zusätzlichen freien Speicherplatz haben. Siehe Brents Rat hier .
Wie viel freier Speicherplatz für Sie gut ist, hängt davon ab, wie viel Sie sich für Fragmentierungs- und Dateiwachstumsaktivitäten leisten können. Wenn IFI aktiviert ist, erfolgt das Dateiwachstum fast sofort, aber Sie erhalten immer noch eine Fragmentierung. Eine gute Faustregel ist, so viel Platz vorzuweisen, wie Sie für nötig halten, oder das Wachstum zu überwachen und bei Bedarf regelmäßig in Blöcken anzupassen. Dies hält die physische Fragmentierung gering.
Auch das Wachstum von Protokolldateien ist viel wichtiger. Zusätzliche Protokolldateien können eine VLF-Fragmentierung verursachen. Dies macht Ihre Wiederherstellungen viel langsamer und kann sich auf Checkpoint / Truncates auswirken. Hier sind einige Leistungsrisiken, die Sie mit einem fragmentierten Protokoll eingehen. Führen Sie DBCC LOGINFO();
für jede Datenbank eine aus. Versuchen Sie, die Zahl pro Kim Tripp bei etwa 50 zu halten, aber wenn Sie Hunderte sehen, treten Fragmentierungsprobleme auf, was bedeutet, dass Ihre Protokolldateien wachsen mussten, um Vorgänge zu unterstützen. Eine gute Möglichkeit, um zu sehen, wie Ihre Protokolldatei laut Paul Randal aussehen sollte, besteht darin, sie eine Woche lang wachsen zu lassen und neu zu indizieren. Das könnte ein guter Punkt sein, vielleicht können Sie dort für alle Fälle etwas mehr freien Speicherplatz schaffen. Stellen Sie sicher, dass Ihre Protokolle nicht mit DBCC LOGINFO () fragmentiert sind. wieder und wenn sie es sind, bedeutet das, dass sie sehr gewachsen sind. Verkleinern und erweitern Sie die Protokolldatei erneut mitdiese Methode .