sql >> Databasteknik >  >> RDS >> Sqlserver

6 sätt att kontrollera storleken på en databas i SQL Server med T-SQL

Om du använder ett GUI-verktyg, som SSMS för att hantera dina databaser, kan du enkelt kontrollera storleken på din databas genom att klicka dig igenom GUI (högerklicka på databasen, peka på Rapporter , sedan Standardrapporter, och klicka sedan på Diskanvändning ).

Men om du föredrar att använda T-SQL för att hantera dina databaser, måste du köra en fråga som returnerar denna information.

Den här artikeln presenterar sex sätt att kontrollera storleken på en SQL Server-databas med T-SQL.

Sp_spaceused lagrad procedur

Detta är en systemlagrad procedur som visar antalet rader, reserverat diskutrymme och diskutrymme som används av en tabell, indexerad vy eller Service Broker-kö i den aktuella databasen, eller visar diskutrymmet som reserverats och används av hela databasen.

För att använda den, byt helt enkelt till den relevanta databasen och utför proceduren. Så här:

ANVÄND WideWorldImporters;EXEC sp_spaceused;

Resultat:

database_name database_size oallokerat utrymme -------------------- ------------ ------------ -----WideWorldImporters 3172,00 MB 2511,76 MB 1 rad(er) returnerade reserverad data index_size oanvänd ---------- ---------- ---------- --- ----573688 KB 461728 KB 104120 KB 7840 KB1 rad(er) returnerade

Detta returnerar två resultatuppsättningar som ger relevant information.

Du kan också ange ett objektnamn för att returnera data om ett specifikt objekt i databasen. I det här fallet kommer endast en resultatuppsättning att returneras.

Exempel:

ANVÄND WideWorldImporters;EXEC sp_spaceused N'Application.Cities';

Resultat:

namnrader reserverade data index_size unused------ -------------------- -------- ------- ---------- ------Städer 37940 4880 KB 3960 KB 896 KB 24 KB

I det här exemplet returnerar vi information om Cities endast tabell.

Sp_helpdb lagrad procedur

En annan systemlagrad procedur är sp_helpdb .

Här är ett exempel på att kalla det:

EXEC sp_helpdb N'WideWorldImporters';

Resultat:

namn fil-id filnamn filgruppstorlek maxstorlek tillväxtanvändning ------------ ------ ---------------- ----- ---- ---------- -------------------- -------- ----------WWI_Primär 1 /data/WWI .mdf PRIMÄR 1048576 KB Obegränsad 65536 KB data endastWWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB endast logg WWI_UserData 3 /data/WWI_UD.ndf Unlimited data1 KB57D1 KB5pre 5 KB 5 USERD endast 2097KB 5 
 I det här fallet skickar vi namnet på databasen som ett argument. Vi kan också anropa sp_helpdb utan att ge ett argument. Om vi ​​gör detta kommer det att returnera information om alla databaser i sys.databases katalogvy.

Sp_databases lagrade procedur

Ytterligare ett alternativ är sp_databases systemlagrad procedur. Denna lagrade procedur listar databaser som antingen finns i en instans av SQL Server eller är tillgängliga via en databasgateway.

Så här kör du det:

EXEC sp_databases;

Resultat:

DATABASE_NAME DATABASE_SIZE ANMÄRKNINGAR------------------------ ------------ -------master 6848 null modell 16384 null msdb 15616 null Musik 16384 null Nature 16384 null Solutions 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null world 16384 null WorldData null

Vyn sys.master_files

Ovanstående lagrade procedur frågar efter sys.master_files se. Så ett alternativ är att gå direkt till vyn och välja dina kolumner:

VÄLJ namn, storlek, storlek * 8/1024 'Storlek (MB)', max_sizeFROM sys.master_filesWHERE DB_NAME(database_id) ='WideWorldImporters';

Resultat:

namnstorlek Storlek (MB) max_size ------------ ------ ---------- ----------WWI_Primär 131072 1024 - 1 WWI_Log 12800 100 268435456WWI_UserData 262144 2048 -1 

I det här fallet kan vi se storleken på varje datafil och loggfil, eftersom de är listade separat. Du kommer också att märka att jag utför en beräkning på size kolumn för att konvertera värdet till megabyte (MB).

Vyn sys.database_files

Det finns också en systemvy som heter sys.database_files . Vi kan använda denna vy för att returnera samma information som föregående exempel:

ANVÄND WideWorldImporters;VÄLJ namn, storlek, storlek * 8/1024 'Storlek (MB)', max_sizeFROM sys.database_files;

Resultat:

namnstorlek Storlek (MB) max_size ------------ ------ ---------- ----------WWI_Primär 131072 1024 - 1 WWI_Log 12800 100 268435456WWI_UserData 262144 2048 -1 

Använd en fönsterfunktion

Ett potentiellt problem med de två föregående exemplen är att de listar storleken på varje fil separat. Detta kan ses som positivt eller negativt beroende på vad du vill uppnå.

Det kan också hävdas att de tre första lösningarna på den här sidan är problematiska, eftersom de bara ger summan av alla filer – de listar inte varje enskild fil tillsammans med dess storlek.

Så vad händer om du vill se både storleken på varje enskild fil, och summan av alla filer för varje databas?

Du kan använda OVER klausul för att göra exakt det.

Här är ett exempel:

SELECT d.name AS 'Databas', 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_sizeFROM sys.master_files mINNER JOIN sys.databases d ONd.database_id =m.database_id;

Resultat:

Databasfilstorlek (MB) Totalt databas------------------------- --------------- ------ --- --------------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 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 WideWorld_U42 world 81 World 8 World 8 World 8 World 8 World 8 World 8 World 8 World 

Detta listar varje databas, filerna för varje databas, filstorleken för varje fil, såväl som summan av alla filer för varje databas. Detta kräver att varje databas (och deras totala storlek) listas flera gånger (en gång för varje fil).


  1. Varför använder Oracle DBMS_STATS.GATHER_TABLE_STATS?

  2. Hur man aktiverar loggning för SQL-satser när man använder JDBC

  3. Automatisera PostgreSQL dagliga uppgifter med Jenkins

  4. Jämför arrayer för likhet, ignorera ordningen av element