Jeśli używasz narzędzia GUI, takiego jak SSMS do zarządzania bazami danych, możesz łatwo sprawdzić rozmiar swojej bazy danych, klikając w GUI (kliknij bazę danych prawym przyciskiem myszy, wskaż Raporty , a następnie Raporty standardowe a następnie kliknij Wykorzystanie dysku ).
Jeśli jednak wolisz używać T-SQL do zarządzania bazami danych, musisz uruchomić zapytanie, które zwróci te informacje.
W tym artykule przedstawiono sześć sposobów sprawdzania rozmiaru bazy danych SQL Server za pomocą T-SQL.
Procedura składowana sp_spaceused
Jest to systemowa procedura składowana, która wyświetla liczbę wierszy, zarezerwowane miejsce na dysku i miejsce na dysku używane przez tabelę, widok indeksowany lub kolejkę Service Broker w bieżącej bazie danych lub wyświetla miejsce na dysku zarezerwowane i używane przez całą bazę danych.
Aby z niego skorzystać, wystarczy przejść do odpowiedniej bazy danych i wykonać procedurę. Tak:
USE WideWorldImporters; EXEC sp_spaceused;
Wynik:
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
Zwraca to dwa zestawy wyników, które dostarczają odpowiednich informacji.
Możesz również podać nazwę obiektu, aby zwrócić dane dotyczące określonego obiektu w bazie danych. W takim przypadku zostanie zwrócony tylko jeden zestaw wyników.
Przykład:
USE WideWorldImporters; EXEC sp_spaceused N'Application.Cities';
Wynik:
name rows reserved data index_size unused ------ -------------------- -------- ------- ---------- ------ Cities 37940 4880 KB 3960 KB 896 KB 24 KB
W tym przykładzie zwracamy informacje o Cities
tylko stół.
Procedura przechowywana sp_helpdb
Inną systemową procedurą składowaną jest sp_helpdb
.
Oto przykład takiego wywołania:
EXEC sp_helpdb N'WideWorldImporters';
Wynik:
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
W takim przypadku jako argument przekazujemy nazwę bazy danych. Możemy również zadzwonić do sp_helpdb
bez podania argumentu. Jeśli to zrobimy, zwróci informacje o wszystkich bazach danych w sys.databases
widok katalogu.
Procedura przechowywana sp_databases
Jeszcze inną opcją jest sp_databases
systemowa procedura składowana. Ta procedura składowana zawiera listę baz danych, które znajdują się w instancji SQL Server lub są dostępne przez bramę bazy danych.
Oto jak to wykonać:
EXEC sp_databases;
Wynik:
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
Widok sys.master_files
Powyższa procedura składowana wysyła zapytanie do sys.master_files
pogląd. Więc alternatywą jest przejście bezpośrednio do widoku i wybranie kolumn:
SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.master_files WHERE DB_NAME(database_id) = 'WideWorldImporters';
Wynik:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
W tym przypadku możemy zobaczyć rozmiar każdego pliku danych i pliku dziennika, ponieważ są one wymienione osobno. Zauważysz również, że wykonuję obliczenia na size
kolumna, aby przekonwertować wartość na megabajty (MB).
Widok sys.database_files
Dostępny jest również widok systemowy o nazwie sys.database_files
. Możemy użyć tego widoku, aby zwrócić te same informacje, co w poprzednim przykładzie:
USE WideWorldImporters; SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.database_files;
Wynik:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
Użyj funkcji okna
Jednym z potencjalnych problemów z poprzednimi dwoma przykładami jest to, że podają rozmiar każdego pliku osobno. Może to być postrzegane jako pozytywne lub negatywne, w zależności od tego, co chcesz osiągnąć.
Można również argumentować, że pierwsze trzy rozwiązania na tej stronie są problematyczne, ponieważ podają tylko sumę wszystkich plików – nie wymieniają każdego pliku z osobna wraz z jego rozmiarem.
Co z tego, jeśli chcesz zobaczyć zarówno rozmiar poszczególnych plików, i suma wszystkich plików dla każdej bazy danych?
Możesz użyć OVER
klauzula, aby dokładnie to zrobić.
Oto przykład:
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;
Wynik:
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
Zawiera listę każdej bazy danych, pliki dla każdej bazy danych, rozmiar pliku dla każdego pliku, a także sumę wszystkich plików dla każdej bazy danych. Wymaga to, aby każda baza danych (i jej całkowity rozmiar) była wymieniona wiele razy (raz dla każdego pliku).