Wenn Sie ein GUI-Tool wie SSMS verwenden, um Ihre Datenbanken zu verwalten, können Sie die Größe Ihrer Datenbank ganz einfach überprüfen, indem Sie sich durch die GUI klicken (klicken Sie mit der rechten Maustaste auf die Datenbank, zeigen Sie auf Berichte , dann Standardberichte und klicken Sie dann auf Festplattennutzung ).
Wenn Sie jedoch lieber T-SQL verwenden, um Ihre Datenbanken zu verwalten, müssen Sie eine Abfrage ausführen, die diese Informationen zurückgibt.
Dieser Artikel stellt sechs Möglichkeiten vor, die Größe einer SQL Server-Datenbank mit T-SQL zu überprüfen.
Die gespeicherte Prozedur sp_spaceused
Dies ist eine gespeicherte Systemprozedur, die die Anzahl der Zeilen, den reservierten Speicherplatz und den von einer Tabelle, indizierten Ansicht oder einer Service Broker-Warteschlange verwendeten Speicherplatz in der aktuellen Datenbank oder den von der gesamten Datenbank reservierten und verwendeten Speicherplatz anzeigt.
Wechseln Sie dazu einfach in die entsprechende Datenbank und führen Sie die Prozedur aus. So:
USE WideWorldImporters; EXEC sp_spaceused;
Ergebnis:
database_name database_size unallocated space ------------------ ------------- ----------------- WideWorldImporters 3172.00 MB 2511.76 MB 1 row(s) returned reserved data index_size unused --------- --------- ---------- ------- 573688 KB 461728 KB 104120 KB 7840 KB 1 row(s) returned
Dies gibt zwei Ergebnismengen zurück, die die relevanten Informationen liefern.
Sie können auch einen Objektnamen angeben, um Daten zu einem bestimmten Objekt in der Datenbank zurückzugeben. In diesem Fall wird nur eine Ergebnismenge zurückgegeben.
Beispiel:
USE WideWorldImporters; EXEC sp_spaceused N'Application.Cities';
Ergebnis:
name rows reserved data index_size unused ------ -------------------- -------- ------- ---------- ------ Cities 37940 4880 KB 3960 KB 896 KB 24 KB
In diesem Beispiel geben wir Informationen über die Cities
zurück nur Tabelle.
Die gespeicherte Prozedur sp_helpdb
Eine weitere gespeicherte Systemprozedur ist sp_helpdb
.
Hier ist ein Beispiel für den Aufruf:
EXEC sp_helpdb N'WideWorldImporters';
Ergebnis:
name fileid filename filegroup size maxsize growth usage ------------ ------ ---------------- --------- ---------- ------------- -------- --------- WWI_Primary 1 /data/WWI.mdf PRIMARY 1048576 KB Unlimited 65536 KB data only WWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB log only WWI_UserData 3 /data/WWI_UD.ndf USERDATA 2097152 KB Unlimited 65536 KB data only
In diesem Fall übergeben wir den Namen der Datenbank als Argument. Wir können auch sp_helpdb
aufrufen ohne ein Argument zu liefern. Wenn wir dies tun, werden Informationen zu allen Datenbanken in den sys.databases
zurückgegeben Katalogansicht.
Die gespeicherte Prozedur sp_databases
Eine weitere Option sind die sp_databases
System gespeicherte Prozedur. Diese gespeicherte Prozedur listet Datenbanken auf, die sich entweder in einer Instanz von SQL Server befinden oder auf die über ein Datenbank-Gateway zugegriffen werden kann.
So führen Sie es aus:
EXEC sp_databases;
Ergebnis:
DATABASE_NAME DATABASE_SIZE REMARKS ------------------ ------------- ------- master 6848 null model 16384 null msdb 15616 null Music 16384 null Nature 16384 null Solutions 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null world 16384 null WorldData 16384 null
Die sys.master_files-Ansicht
Die obige gespeicherte Prozedur fragt die sys.master_files
ab Aussicht. Eine Alternative besteht also darin, direkt zur Ansicht zu gehen und Ihre Spalten auszuwählen:
SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.master_files WHERE DB_NAME(database_id) = 'WideWorldImporters';
Ergebnis:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
In diesem Fall können wir die Größe jeder Datendatei und jeder Protokolldatei sehen, da sie separat aufgeführt sind. Sie werden auch feststellen, dass ich eine Berechnung der size
durchführe Spalte, um den Wert in Megabyte (MB) umzuwandeln.
Die sys.database_files-Ansicht
Es gibt auch eine Systemansicht namens sys.database_files
. Wir können diese Ansicht verwenden, um dieselben Informationen wie im vorherigen Beispiel zurückzugeben:
USE WideWorldImporters; SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.database_files;
Ergebnis:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
Verwenden Sie eine Fensterfunktion
Ein mögliches Problem bei den beiden vorherigen Beispielen besteht darin, dass sie die Größe jeder Datei separat auflisten. Dies kann als positiv oder negativ angesehen werden, je nachdem, was Sie erreichen möchten.
Man könnte auch argumentieren, dass die ersten drei Lösungen auf dieser Seite problematisch sind, weil sie nur die Gesamtsumme aller Dateien liefern – sie listen nicht jede einzelne Datei mit ihrer Größe auf.
Was also, wenn Sie sowohl die Größe jeder einzelnen Datei sehen möchten, und die Summe aller Dateien für jede Datenbank?
Sie könnten den OVER
verwenden Klausel, um genau das zu tun.
Hier ist ein Beispiel:
SELECT d.name AS 'Database', m.name AS 'File', m.size, m.size * 8/1024 'Size (MB)', SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS 'Database Total', m.max_size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id = m.database_id;
Ergebnis:
Database File Size (MB) Database Total ------------------ --------------- --------- -------------- master master 4 6 master mastlog 2 6 model modeldev 8 16 model modellog 8 16 msdb MSDBData 14 14 msdb MSDBLog 0 14 Music Music 8 16 Music Music_log 8 16 Nature Nature 8 16 Nature Nature_log 8 16 Solutions Solutions 8 46 Solutions Solutions_log 8 46 Solutions Solutions_dat_2 10 46 Solutions Solutions_dat_3 10 46 Solutions Solutions_log_2 10 46 tempdb tempdev 8 16 tempdb templog 8 16 WideWorldImporters WWI_Primary 1024 3172 WideWorldImporters WWI_Log 100 3172 WideWorldImporters WWI_UserData 2048 3172 world world 8 16 world world_log 8 16
Dies listet jede Datenbank, die Dateien für jede Datenbank, die Dateigröße für jede Datei sowie die Gesamtzahl aller Dateien für jede Datenbank auf. Dies erfordert, dass jede Datenbank (und ihre Gesamtgröße) mehrfach aufgeführt wird (einmal für jede Datei).