SQL Server 2005 Riesiges DB-Problem


7

Meine DB-Dateien wachsen sehr schnell (Designer bin nicht ich und nur ein wöchentlicher Bericht bringt 7 GB Wachstum). Und schließlich habe ich nicht genug Speicherplatz auf der Festplatte. Und die Anzahl der nicht gemeldeten Wochen zählt hoch.

Ich habe einige Optionen auszuführen, benötige aber Ihre Empfehlungen:

  1. Verkleinern Sie die Datenbank (gibt das Verkleinern dem Betriebssystem Speicherplatz?)

  2. Trennen Sie die Datenbank von einer externen Festplatte oder einem Netzwerkspeicher und hängen Sie sie an. (Wird Netzwerkspeicher von SQL Server 2005 unterstützt?)

  3. Ändern Sie die RAID-Konfiguration von 1 auf 5, um die Festplattengröße zu verdoppeln. (Dies ist die sicherste Option, aber auch gefährlich für Änderungen der RAID-Konfiguration.)

Vielen Dank für diese tollen und hilfreichen Antworten zu meiner Frage. Ich habe die Protokolldatei überprüft und 99% des Speicherplatzes werden nicht verwendet. Also habe ich es geschrumpft. Da die Datenbank nur verwendet wird, wenn wir einige Berichte benötigen (auf Zeitanforderung muss nicht immer auf db zugegriffen werden müssen), denke ich, dass die Leistung für mich kein Problem darstellt.


Ist der Speicherplatz im Protokoll oder in den Datendateien?
Richard

Datendateien ca. 90 GB. Protokolldateien haben eine Größe von ca. 20 GB.
Olgun Kaya

Befinden sich die Datendateien und Protokolldateien auf demselben Laufwerk?
Muthukkumaran Kaliyamoorthy

Ja, sie befinden sich auf derselben Festplatte, sogar im selben Verzeichnis. - Olgun Kaya
CoderHawk

[Überprüfen Sie es hier Verkleinern der SQL Server-Dateien] [1] [1]: sqlserverblogforum.blogspot.com/2011/03/…
Muthukkumaran Kaliyamoorthy

Antworten:


6

Durch das Verkleinern der Datenbank können Sie dem Betriebssystem etwas Speicherplatz zurückgeben. Dieser Speicherplatz ist jedoch mit Leistungskosten verbunden, da die Verkleinerungsaktivität die Datenbank fragmentiert. Sie können dies beheben, indem Sie Ihre Indizes neu erstellen. Dies führt jedoch normalerweise dazu, dass der Speicherplatz zurückgefordert wird. Und die Vorstellung, dass ein Schrumpfen eine Lösung wäre, ist falsch, weil Sie das Wachstumsproblem selbst nicht ansprechen, sondern lediglich versuchen, einen Verband auf eine saugende Brustwunde zu legen.

Platzieren Sie Ihre Dateien auf Festplatten, die einfach erweitert werden können. Externer Speicher funktioniert gut (oder ein SAN, wenn möglich). Sie können keinen UNC-Pfad für Ihre Datenbankdateien verwenden, aber Sie können DFS verwenden, um ein Laufwerk bereitzustellen und auf einen Netzwerkspeicherort zu verweisen, und alles würde einwandfrei funktionieren.

HTH


Ich werde es morgen versuchen. Die externe Festplatte scheint die bessere Wahl zu sein. Übrigens funktioniert die Datenbank nicht immer. Wir verwenden die Datenbank nur zum Berichten von Skripten. Es befindet sich auf einem Offline-Computer, wenn die Berichtsdateien bei uns eingehen. Wir verwenden einige Skripte dafür. Daher ist die Leistung hier möglicherweise kein wichtiger Faktor.
Olgun Kaya

Eine leistungsstärkere Alternative zu DFS wäre iSCSI, wenn Ihr SAN-Gerät dies unterstützt. Mit diesem Ansatz können Sie problemlos auf Terabyte Daten skalieren.
Gaius

5

Wenn Sie einen relevanten Sicherungsplan haben, wird Ihre Protokolldatei nicht unbegrenzt wachsen. Sie werden wahrscheinlich feststellen, dass der darin enthaltene Speicherplatz hauptsächlich nicht zugewiesen ist. Wenn Seitenblöcke im Protokoll gesichert werden (abhängig von Ihrem Sicherungs- / Wiederherstellungsmodell lesen Sie diese Optionen natürlich nach, wenn Sie mit ihnen nicht vertraut sind), werden sie als markiert kostenlos, um später wieder verwendet zu werden, aber nicht für das Betriebssystem freigegeben. Wenn Ihr großer Prozess das nächste Mal ausgeführt wird, viele Einfügungen / Aktualisierungen verursacht und daher einige GB Protokollspeicher benötigt, muss MSSQL nicht mehr Speicherplatz vom Betriebssystem anfordern, da es nur die Blöcke verwenden kann, die der Protokolldatei bereits zugewiesen sind Derzeit gibt es nichts, was nicht überschrieben werden kann.

Wenn Ihre Protokolldateien jedes Mal, wenn dieser wöchentliche Prozess ausgeführt wird, ein zusätzliches Wachstum von GByte aufweisen , müssen Sie Ihren Sicherungsplan überprüfen, da SQLServer die Protokollseiten auch nicht als wiederverwendbar ansieht, da Ihr Sicherungsregime für die Daten nicht korrekt ist und Aktivität (oder es könnte so einfach sein, dass Sie nicht oft genug Backups erstellen).

Das Wachstum in den Datendateien ist ähnlich: Wenn die Dateien einen großen Teil des freien Speicherplatzes enthalten, wird dieser beim nächsten Mal verwendet, wenn zusätzlicher Speicherplatz benötigt wird, anstatt das Betriebssystem zu bitten, mehr Speicherplatz zuzuweisen. Wenn Ihre Daten unerwartet groß sind, sollten Sie auf eine Überindizierung achten. Möglicherweise finden Sie in großen Tabellen Indizes, die nie wirklich verwendet werden (entweder werden sie überhaupt nicht benötigt oder bieten keinen großen Vorteil gegenüber einem anderen Index, der ebenfalls verwendet wird) vorhanden). Klassische Beispiele hierfür sind das Auffinden jeder Spalte in einer breiten Tabelle mit einem eigenen Index (was normalerweise, wenn auch nicht immer, ein Zeichen für ein schlechtes Tabellen- / Indexdesign ist ) oder das Auffinden eines Index für " Spalte1 und Spalte2 " und eines für Spalte1für sich allein: Der Abfrageplaner und der Runner können den zusammengesetzten Index genauso gut verwenden wie den einfachen für Abfragen, die auf Spalte 1 basieren, sodass für den zusätzlichen Index kein Platz benötigt wird. Das Verwalten von nicht nützlichen Indizes wirkt sich auch auf die Schreibleistung aus. Dieses Buch enthält einige Abschnitte, in denen häufig auftretende Indexprobleme behandelt werden, wenn Sie sich das Problem genauer ansehen möchten. Es ist für alle Entwickler und Datenbankadministratoren ohnehin eine Lektüre wert, IMO.

Das unnötige Verkleinern von Dateien kann zu einer übermäßigen Fragmentierung der Dateien führen, was die Leistung beeinträchtigen kann. Seien Sie also vorsichtig, wenn Sie diesen Weg gehen.

Zum Wechsel von RAID1 zu RAID5: Das würde ich nicht empfehlen. RAID5 hat häufig Leistungsprobleme bei der Arbeit mit schreibintensiven Datenbanken (es wird wahrscheinlich die großen Prozesse, die Daten und Transaktionsprotokolleinträge im Wert von GByte generieren, erheblich verlangsamen), da vor dem Schreiben zusätzliche Lesevorgänge durchgeführt werden. Prüfsummenausgabe. Anstatt ein Laufwerk von R1 auf R5 hinzuzufügen, würde ich zwei zusätzliche Laufwerke verwenden und R10 verwenden - immer noch doppelt so viel Speicherplatz, aber ohne das Problem mit der Schreibleistung (vorausgesetzt, auf dem Server ist natürlich Platz für zwei zusätzliche Laufwerke) !). Was auch immer Sie in diesem Bereich tun, die Konvertierung von einer RAID-Anordnung in eine andere ist wahrscheinlich mit einer großen Ausfallzeit verbunden, wenn Sie die Daten sichern und das Array neu erstellen. und kopieren Sie die Daten wieder auf (es sei denn, Sie kaufen einen ganz neuen Satz Laufwerke und können gleichzeitig neue und alte Arrays ausführen, wodurch die Ausfallzeiten erheblich reduziert werden). Eine andere Möglichkeit wäre, zwei Laufwerke als neues RAID1-Array hinzuzufügen und dann die dynamischen Volumes von Windows zu verwenden, um diese beiden Arrays zu überspannen (was die Größe von RAID10 ergibt, jedoch ohne einen Teil des Leistungsgewinns, der durch Striping erzielt werden kann). ODER Sie können die beiden Arrays getrennt halten und die Datendateien auf einem und die Transaktionsprotokolle auf dem anderen halten. Wenn Sie die Daten und Protokolle auf getrennten Spindeln auf diese Weise aufbewahren, können Sie die Leistung von Schreibvorgängen erheblich verbessern, indem Sie die für die Aktualisierung erforderlichen Kopfbewegungen reduzieren sowohl das Protokoll als auch die Datendatei. Diese letzte Option hat auch eine minimale Ausfallzeit, da, sobald das Laufwerk im Rest ist, "live" ausgeführt werden kann:


Vielen Dank für diesen tollen Artikel zu meiner Frage. Ich habe die Protokolldatei überprüft und% 99 des Speicherplatzes wird nicht verwendet. Also habe ich es geschrumpft. Da die Datenbank nur verwendet wird, wenn wir einige Berichte benötigen (auf Zeitanforderung muss nicht immer auf db zugegriffen werden müssen), denke ich, dass die Leistung für mich kein Problem darstellt. Vielen Dank für Ihre Hilfe Jungs.
Olgun Kaya

1

Ich muss sehen, welche Tische so schnell wachsen.

Möglicherweise haben Sie ein ähnliches Problem wie in der Vergangenheit. Selbst wenn die Tabellendaten gelöscht wurden, wurde der Speicherplatz von der Tabelle nicht freigegeben, sodass die Tabelle viele GB verwendet / gemeldet hat, aber nur 100.000 Zeilen (Unsere Lösung bestand darin, die Tabelle neu zu erstellen).

Wenn es kein Problem mit versteckten Daten gibt, können Sie eine neue Dateigruppe auf einem anderen Laufwerk (storage..etc) erstellen und dort Datendateien erstellen. Danach besteht die Lösung darin, die großen Tabellen und ihre Indizes für diese neue Dateigruppe neu zu erstellen.

Das Wichtigste ist jetzt zu verstehen, was / warum Tabellen wachsen. Sie können auch diese Frage sehen: Gibt es eine zuverlässige Methode, um zu bestimmen, wann Sie DBCC CLEANTABLE ausführen sollten, um Speicherplatz zurückzugewinnen? für einige Informationen zu Platzproblemen.


1

Ich empfehle Ihnen, das Problem aus einem anderen Blickwinkel zu behandeln, als dies auch hier von SQLRockstar gesagt wurde . Sie möchten nur das Problem beheben und nicht die Ursache des Problems finden, bei der es sich um einen falschen Ansatz handelt, da die Ursache erneut auftritt und Ihnen dieselben Probleme bereitet.

Dinge zu überprüfen / zu tun:

  1. Befindet sich die Datenbank im vollständigen Wiederherstellungsmodell? Wenn Sie die Datenbank nur für die Berichterstellung verwenden, sollten Sie möglicherweise das Wiederherstellungsmodell in "Einfach" ändern. In diesem Modell verwaltet SQL Server nur eine minimale Menge an Informationen im Transaktionsprotokoll. SQL Server schneidet das Transaktionsprotokoll jedes Mal ab, wenn die Datenbank einen Transaktionsprüfpunkt erreicht. Abschneiden ist nicht gleich Schrumpfen. Nach dem Abschneiden hat die Protokolldatei möglicherweise dieselbe Größe, aber der darin enthaltene Speicherplatz wird für das nächste Wachstum freigegeben. Und es ist besser, so zu gehen, da eine zusätzliche Protokolldatei jedes Mal zusätzlichen Druck auf die Festplatten ausübt, wenn die Protokolldatei vergrößert werden muss.

  2. Wenn die Datendatei ebenfalls wächst, sollten Sie ermitteln, welche Objekte die größten darin sind und ob diese räumlich reduziert werden können. Wenn Sie es nicht entworfen haben, gibt es möglicherweise nicht verwendete Indizes, von denen Sie nicht wissen, dass sie große Größen haben?

Hier sind einige NÜTZLICHE CODES, um dies herauszufinden: Tabellen- und Indexgröße


0

Als erstes müssen Sie überprüfen, wie viel freier Speicherplatz in den Daten- und Protokolldateien verfügbar ist.

SELECT name AS 'FileName' , physical_name AS 'PhysicalName', size/128 AS 'TotalSizeinMB',
    size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS 'AvailableSpaceInMB', 
    CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS 'ActualSpaceUsedInMB', 
    (CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0)/(size/128)*100. as '%SpaceUsed'
    FROM sys.database_files;

Das einfache Verkleinern hilft nicht, wenn in den Dateien kein freier Speicherplatz vorhanden ist. Sehen Sie sich auch die Einstellungen für das automatische Wachstum in den Daten- und Protokolldateien an. Es gibt einige Fehler + versehentlich setzen Leute ein großes automatisches Wachstum und manchmal ist das zu viel.

Im Allgemeinen empfehle ich in Ihren Fällen SHRINKING nicht und das Hinzufügen von mehr Speicherplatz ist der richtige Weg.


Der insgesamt verfügbare Speicherplatz beträgt: 30 GB.
Olgun Kaya

Das hilft nicht. Bitte teilen Sie alle Werte aus der obigen Abfrage.
Sankar Reddy

0

Datendateien ca. 90 GB. Protokolldateien haben eine Größe von ca. 20 GB. - Olgun Kaya vor 19 Stunden

Ich stimme diesem Sankar zu.

Verkleinern Sie die Datenbank nicht, sie wächst immer wieder und verursacht die Fragmentierung.

Der Vergleich der 90-GB-Datendatei mit der 20-GB-Protokolldatei ist zu umfangreich. Warum die Protokolldatei 20 GB groß war, überprüfen Sie die Wiederherstellungsmodelle und den Sicherungsplan.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.