sql >> Database >  >> RDS >> Sqlserver

6 manieren om de grootte van een database in SQL Server te controleren met T-SQL

Als u een GUI-tool, zoals SSMS, gebruikt om uw databases te beheren, kunt u eenvoudig de grootte van uw database controleren door door de GUI te klikken (klik met de rechtermuisknop op de database, wijs naar Rapporten en vervolgens Standaardrapporten, en klik vervolgens op Schijfgebruik ).

Als u echter liever T-SQL gebruikt om uw databases te beheren, moet u een query uitvoeren die deze informatie retourneert.

Dit artikel presenteert zes manieren om de grootte van een SQL Server-database te controleren met behulp van T-SQL.

De sp_spaceused opgeslagen procedure

Dit is een door het systeem opgeslagen procedure die het aantal rijen, gereserveerde schijfruimte en schijfruimte weergeeft die worden gebruikt door een tabel, geïndexeerde weergave of Service Broker-wachtrij in de huidige database, of de schijfruimte weergeeft die is gereserveerd en gebruikt door de hele database.

Om het te gebruiken, schakelt u eenvoudig over naar de relevante database en voert u de procedure uit. Zoals dit:

GEBRUIK WideWorldImporters;EXEC sp_spaceused;

Resultaat:

database_name database_size niet-toegewezen ruimte------------------ ------------- ------------ -----WideWorldImporters 3172,00 MB 2511,76 MB 1 rij(en) geretourneerdreserved data index_size ongebruikt --------- --------- ---------- --- ----573688 KB 461728 KB 104120 KB 7840 KB1 rij(en) geretourneerd

Dit levert twee resultaatsets op die de relevante informatie verschaffen.

U kunt ook een objectnaam opgeven om gegevens over een specifiek object in de database te retourneren. In dit geval wordt er slechts één resultaatset geretourneerd.

Voorbeeld:

GEBRUIK WideWorldImporters;EXEC sp_spaceused N'Application.Cities';

Resultaat:

naam rijen gereserveerd data index_size ongebruikt------ -------------------- -------- ------- ---------- ------Steden 37940 4880 KB 3960 KB 896 KB 24 KB

In dit voorbeeld retourneren we informatie over de Cities alleen tafel.

De sp_helpdb opgeslagen procedure

Een andere door het systeem opgeslagen procedure is sp_helpdb .

Hier is een voorbeeld van hoe je dat noemt:

EXEC sp_helpdb N'WideWorldImporters';

Resultaat:

naam bestandsid bestandsnaam bestandsgroep grootte maximale groei gebruik ------------ ------ ---------------- ----- ---- ---------- ------------- -------- --------- WWI_Primaire 1 /data/WWI .mdf PRIMARY 1048576 KB Onbeperkt 65536 KB alleen dataWWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB alleen log WWI_UserData 3 /data/WWI_UD.ndf USERDATA 2097152 KB Onbeperkt 65536 KB alleen data

In dit geval geven we de naam van de database door als argument. We kunnen ook sp_helpdb . bellen zonder een argument te geven. Als we dit doen, retourneert het informatie over alle databases in de sys.databases catalogusweergave.

De sp_databases opgeslagen procedure

Nog een andere optie is de sp_databases systeem opgeslagen procedure. Deze opgeslagen procedure geeft een lijst weer van databases die zich ofwel in een exemplaar van de SQL Server bevinden of die toegankelijk zijn via een databasegateway.

Zo voer je het uit:

EXEC sp_databases;

Resultaat:

DATABASE_NAME DATABASE_SIZE OPMERKINGEN------------------ ------------- -------master 6848 null model 16384 null msdb 15616 null Muziek 16384 null Natuur 16384 null Oplossingen 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null wereld 16384 null WorldData 16384 null

De weergave sys.master_files

De bovenstaande opgeslagen procedure vraagt ​​de sys.master_files weergave. Een alternatief is dus om rechtstreeks naar de weergave te gaan en uw kolommen te kiezen:

SELECTEER naam, grootte, grootte * 8/1024 'Grootte (MB)', max_sizeFROM sys.master_filesWHERE DB_NAME(database_id) ='WideWorldImporters';

Resultaat:

In dit geval kunnen we de grootte van elk gegevensbestand en logbestand zien, aangezien ze afzonderlijk worden vermeld. Je zult ook merken dat ik een berekening maak op de size kolom om de waarde om te zetten in megabytes (MB).

De weergave sys.database_files

Er is ook een systeemweergave genaamd sys.database_files . We kunnen deze weergave gebruiken om dezelfde informatie terug te geven als in het vorige voorbeeld:

GEBRUIK WideWorldImporters;SELECT naam, grootte, grootte * 8/1024 'Grootte (MB)', max_sizeFROM sys.database_files;

Resultaat:

Gebruik een vensterfunctie

Een mogelijk probleem met de vorige twee voorbeelden is dat ze de grootte van elk bestand afzonderlijk vermelden. Dit kan als positief of negatief worden gezien, afhankelijk van wat u wilt bereiken.

Er zou ook kunnen worden beweerd dat de eerste drie oplossingen op deze pagina problematisch zijn, omdat ze alleen de som van alle bestanden weergeven - ze geven niet elk afzonderlijk bestand samen met de grootte ervan.

Dus wat als u zowel de grootte van elk afzonderlijk bestand, en . wilt zien? het totaal van alle bestanden voor elke database?

Je zou de OVER . kunnen gebruiken clausule om precies dat te doen.

Hier is een voorbeeld:

SELECT d.name AS 'Database', m.name AS 'File', m.size, m.size * 8/1024 'Grootte (MB)', SUM(m.size * 8/1024) OVER ( PARTITIE OP d.name) ALS 'Databasetotaal', m.max_sizeFROM sys.master_files mINNER JOIN sys.databases d ONd.database_id =m.database_id;

Resultaat:

Databasebestandsgrootte (MB) Database Totaal ------------------ --------------- ------ --- --------------master master 4 6 master mastlog 2 6 model modeldev 8 16 model modellog 8 16 msdb MSDBData 14 14 msdb MSDBLog 0 14 Muziek Muziek 8 16 Muziek Muziek_log 8 16 Natuur 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 Sol utions 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 

Dit geeft een overzicht van elke database, de bestanden voor elke database, de bestandsgrootte voor elk bestand en het totaal van alle bestanden voor elke database. Dit vereist dat elke database (en hun totale grootte) meerdere keren wordt vermeld (eenmaal voor elk bestand).


  1. Een tabel afkappen in een opgeslagen procedure

  2. MySQL-fout 1241:operand moet 1 kolom(men) bevatten

  3. Rails ongedefinieerde methode voor ActiveRecord_Associations_CollectionProxy

  4. Hoe maak ik een externe sleutel in SQL Server?