Wie überprüfe ich, ob ich die Größenbeschränkung für die Express Edition erreiche?

10

Ich bin verwirrt. AFAIK SQL Server 2005 Express hat ein Limit von 4 GB Datenbank Datengröße. Ich habe jedoch die folgenden Ergebnisse von sp_spaceused:

Was ist die tatsächliche Größe der Datenbank

  1. Wie kann ich überprüfen, ob meine Datenbank die Größenbeschränkung erreicht?
  2. Ist nicht zugewiesener Speicherplatz space leftbis ich das Limit erreicht habe?
  3. Wie viel Platz habe ich noch?
  4. Zählt index_sizedas Limit?
g00fy
quelle
Sie können die Spalte backup_size von msdb.dbo.backupset überprüfen.

Antworten:

6

Hier ist ein gutes Drehbuch, das ich schamlos von hier gerissen habe :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

Dies ist gut, da Sie dadurch den freien Speicherplatz in jeder DB-Datei (möglicherweise haben Sie mehrere Dateien und möglicherweise hat jemand diese eingerichtet, um einige Objekte in jede Datei einzufügen) sowie die freie Größe erhalten.

Sie haben beispielsweise eine 4-GB-Datendatei mit 3 GB freiem Speicherplatz. Vielleicht haben Sie 1 MDF ohne viele Daten, aber einen NDF mit vielen Daten. Diese Abfrage gibt Auskunft über die freie Größe in jeder Datei und darüber, welcher Datenbank diese Datei zugeordnet ist. Denken Sie daran, alle 'SPACE_USED_MB' für jede Datenbank zu addieren, um die Gesamtgröße zu erhalten.

Viel Glück!

Bearbeiten: Ein nicht unterstützter und fehlerhafter Befehl wurde entfernt, von dem ich dachte, ich könnte mit dem Posten hier für diese Abfrage davonkommen. :(

Ali Razeghi
quelle
PS: Wenn Sie alte Abwärtskompatibilitätsansichten verwenden möchten, können Sie dies durch die Verwendung sysaltfileserheblich vereinfachen (dies macht es überflüssig, überhaupt in jede Datenbank zu gehen).
Aaron Bertrand
1
Danke Aaron für die Sysaltfiles, ich habe mir das noch nicht angesehen! sp_msforeachdb hat viele schmerzhafte Probleme, aber ich habe mir eine SQL Express-Installation vorgestellt, bei der der Typ nur eine Abfrage ausführen möchte, um zu sehen, wie viel freier Speicherplatz in Ordnung ist.
Ali Razeghi
Außer wenn es Datenbanken überspringt und keinen Fehler auslöst ...
Aaron Bertrand
Ja, aber in diesem Fall, glauben Sie wirklich, dass dies ein Problem sein wird, bei dem der Endbenutzer nur eine Datenbankgröße wünscht? Ich denke, ich sollte es nicht veröffentlichen, selbst wenn der Endbenutzer absolut sieht, ob es die gesuchte Datenbank übersprungen hat, damit es kein schlechtes Verhalten verstärkt. Ich werde diesen Teil an dieser Stelle einfach entfernen, Sie haben Recht, wir brauchen diesen Befehl nirgendwo anders verputzt.
Ali Razeghi
5

Die Größe der Datenbank entspricht der Größe der Datei. Überprüfen Sie die tatsächliche Größe der Datendatei (das Transaktionsprotokoll zählt nicht). Ja, Indizes zählen. Wenn Ihnen der Speicherplatz ausgeht, sollten Sie ein Upgrade auf SQL 2012 Express in Betracht ziehen, da dies die Größenbeschränkung auf 10 Gigs erhöht.

mrdenny
quelle
6
SQL Server 2008 R2 Express hat auch ein Limit von 10 GB (nur der Vollständigkeit
halber
1

Wenn sp_spaceused in Ihrer ersten Ergebnismenge die Datenbankgröße von ca. 25 GB anzeigt, einschließlich der Datendatei / Indizes und des Transaktionsprotokolls. Nur die tatsächlichen Daten und Indizes zählen für die SQL Server Express-Grenzwerte. Sie haben also ungefähr 3,3 GB Daten (wie in Ihrer zweiten Ergebnismenge) und die verbleibenden 22 GB sind das Transaktionsprotokoll. Wenn Sie "sp_helpdb" ausführen, wird das tatsächliche Bild angezeigt, da die Datennutzung und die Transaktionsprotokollnutzung in zwei separaten Zeilen angegeben werden.

Ubercoder
quelle