2008-09-05 14 views
6

Ich habe ms SQL-Datenbanken, die sehr groß werden. Bei der Überprüfung finde ich, dass in bestimmten Tabellen ein Haufen ungenutzter Platz ist. Ich mache nicht viele physische Löschungen, also glaube ich nicht, dass es nur Datensätze gelöscht hat. DBCC SHRINK macht die Datei nicht kleiner. Aber wenn ich die Tabelle in eine neue, leere Datenbank ablege, sinkt die Größe um 80%. Anstelle der 7GB, die ich in dieser Tabelle in der aktuellen Datenbank habe, lande ich mit ca. 1,5GB in der frischen Datenbank. Sein als ob SQL-Server zu viel Speicher zuweist. Ist das schon einmal vorgekommen? Ich möchte in der Lage sein, den Tisch zu verkleinern, indem ich ungenutzten zugeteilten Platz entferne, ohne eine völlig neue Datenbank zu verursachen.SQL Server nicht verwendet, aber zugewiesenen Tabellenbereich

Zusätzliche Informationen:

Vollständige Wiederherstellung Modell verwendet. Ich werde versuchen, die Indizes neu zu erstellen, ich denke, es ist eine Weile her. LDFs sind täglich geschrumpft mit einigen verrückten gespeicherten proc, die sie abschneiden.

+0

Es gibt absolut KEINE PUNKTE bei der Verwendung des vollständigen Wiederherstellungsmodells, wenn Sie die LDFs nur abschneiden! Die richtige Methode, um sie zu verkleinern, besteht darin, eine Sicherungskopie der Protokolldateien zu erstellen, um sie dann automatisch zu verkleinern. Jemand, der Log-Ketten und die richtige Backup-Strategie versteht, wird dringend benötigt, um einzugreifen und Ihnen zu helfen, es richtig zu machen. Alles andere bringt Sie zu dem ** Risiko, Daten zu verlieren **. – ErikE

+0

Ist das relevant? KB-Artikel 924027 - [SQL Server erhöht den ungenutzten Speicherplatz für einige Tabellen erheblich] (http://support.microsoft.support.microsoft.comcom/kb/924947) –

+0

Werfen Sie einen Blick auf diesen Knowledge Base-Artikel und sehen Sie, ob er zutrifft: http://support.microsoft.com/kb/913399 –

Antwort

0

In den Optionen können Sie angeben, um wie viel Sie wachsen möchten. Standardmäßig glaube ich, dass es 10% ist. Bei einer Datenbank mit 200 MB werden beim Füllen der letzten Seite weitere 20 MB Seitenspeicherplatz zugewiesen. Bei 7GB würde es 700MB zuweisen.

Ich weiß nicht genau, wo Sie es ändern können, nachdem Sie eine db erstellen, aber ich weiß, es hat es, wenn Sie die db erstellen. Ein wenig Google-Arbeit wird höchstwahrscheinlich die Antwort auf Sie offenbaren.

HINWEIS: meine Antwort ist nicht, wie man es repariert, aber vielleicht, wie man verhindert/erklärt, warum Sie all diesen nicht zugeteilten Raum sehen könnten.

2

Ich habe festgestellt, dass, wenn Sie nicht darauf achten, Ihre Übergangsprotokolldatei (LDF) zu sichern, werden Sie etwas wie dieses Verhalten erhalten. Ich kann nicht genug betonen, wie wichtig es ist, gute "Hygiene" zu haben. Es wird nicht nur Ihren Speck retten, wenn etwas schief geht, sondern ich werde auch dazu beitragen, eine gute Datenbank zu erhalten.

+0

Vereinbar, vergessen Sie nie, Transaktionsprotokolle sowie Datenbanksicherungen zu sichern. Das Protokoll wird wachsen, bis es Ihre ganze Festplatte frisst. – HLGEM

1

ich nicht viele körperliche tun löscht

was über Updates der Tabelle, was die Fragmentierungsgrad ist. Führen Sie DBCC SHOWCONTIG aus, und erstellen Sie den Index neu, wenn er stark fragmentiert ist. Danach haben eine BACKUP LOG WITH TRUNCATE_ONLY von einem SHRINK Befehl gefolgt

0

Das ist für mich einmal

USE [DBNAME] 
GO 

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY) 

GO 
0

Ich hatte ein ähnliches Problem in der Vergangenheit gearbeitet hat, und ich glaube, dass ich das reindex/Schrumpfen didn gefunden‘ t den gesamten ungenutzten Speicherplatz zurückfordern, wenn kein geclusterter Index für eine bestimmte Tabelle vorhanden ist.

0

Es ist möglich, dass die Tabelle mit dem für den Index aktivierten Padding erstellt wurde. Der Grund dafür, dass Leute einen gepolsterten Index erstellen, besteht darin, Seitenaufteilungen zu verhindern.

Klicken Sie mit der rechten Maustaste auf die Tabelle in SQL Manager, und wählen Sie SCRIPT TABLE aus. Dann schauen Sie, ob PAD_INDEX=OFF. Wenn PAD_INDEX verwendet wird, nimmt wahrscheinlich der Tisch Platz ein.

Verwandte Themen