sql >> Database teknologi >  >> RDS >> Sqlserver

6 måder at kontrollere størrelsen af ​​en database i SQL Server ved hjælp af T-SQL

Hvis du bruger et GUI-værktøj, såsom SSMS til at administrere dine databaser, kan du nemt kontrollere størrelsen af ​​din database ved at klikke dig igennem GUI'en (højreklik på databasen, peg på Rapporter , derefter Standardrapporter, og klik derefter på Diskbrug ).

Men hvis du foretrækker at bruge T-SQL til at administrere dine databaser, skal du køre en forespørgsel, der returnerer disse oplysninger.

Denne artikel præsenterer seks måder at kontrollere størrelsen på en SQL Server-database ved hjælp af T-SQL.

Sp_spaceused Stored Procedure

Dette er en systemlagret procedure, der viser antallet af rækker, reserveret diskplads og diskplads, der bruges af en tabel, indekseret visning eller Service Broker-kø i den aktuelle database, eller viser den diskplads, der er reserveret og brugt af hele databasen.

For at bruge den skal du blot skifte til den relevante database og udføre proceduren. Sådan:

BRUG WideWorldImporters;EXEC sp_spaceused;

Resultat:

databasenavn databasestørrelse ikke-allokeret plads------------------------ -------------------- ------------ -----WideWorldImporters 3172,00 MB 2511,76 MB 1 række(r) returnerede reserverede data index_size ubrugt ---------- ---------- ---------- --- ----573688 KB 461728 KB 104120 KB 7840 KB1 række(r) returneret

Dette returnerer to resultatsæt, der giver de relevante oplysninger.

Du kan også angive et objektnavn for at returnere data om et bestemt objekt i databasen. I dette tilfælde vil kun ét resultatsæt blive returneret.

Eksempel:

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

Resultat:

navne rækker reserveret data index_size unused------ -------------------- -------- ------- ---------- ------Byer 37940 4880 KB 3960 KB 896 KB 24 KB

I dette eksempel returnerer vi oplysninger om Cities kun tabel.

Sp_helpdb Stored Procedure

En anden systemlagret procedure er sp_helpdb .

Her er et eksempel på at kalde det:

EXEC sp_helpdb N'WideWorldImporters';

Resultat:

navn fil-id filnavn filgruppestørrelse maks. størrelse vækst brug ------------ ------ ---------------- ----- ---- ---------- -------------------- -------- ----------WWI_Primær 1 /data/WWI .mdf PRIMÆR 1048576 KB Ubegrænset 65536 KB kun dataWWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB kun log WWI_UserData 3 /data/WWI_UD.ndf kun Unlimited 1 KB57D1 KB57D 5 KB57 6 KB57. 

I dette tilfælde sender vi navnet på databasen som et argument. Vi kan også kalde sp_helpdb uden at komme med et argument. Hvis vi gør dette, vil det returnere oplysninger om alle databaser i sys.databases katalogvisning.

Sp_databases Stored Procedure

Endnu en mulighed er sp_databases system lagret procedure. Denne lagrede procedure viser databaser, der enten findes i en forekomst af SQL Server eller er tilgængelige via en databasegateway.

Sådan udføres det:

EXEC sp_databases;

Resultat:

DATABASE_NAME DATABASE_SIZE BEMÆRKNINGER------------------------ ------------ -------master 6848 null model 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

sys.master_files-visningen

Ovenstående lagrede procedure forespørger sys.master_files udsigt. Så et alternativ er at gå direkte til visningen og vælge dine kolonner:

VÆLG navn, størrelse, størrelse * 8/1024 'Størrelse (MB)', max_sizeFROM sys.master_filesWHERE DB_NAME(database_id) ='WideWorldImporters';

Resultat:

navnstørrelse Størrelse (MB) max_size ------------ ------ ---------- ----------WWI_Primær 131072 1024 - 1 WWI_Log 12800 100 268435456WWI_UserData 262144 2048 -1 

I dette tilfælde kan vi se størrelsen af ​​hver datafil og logfil, da de er opført separat. Du vil også bemærke, at jeg udfører en beregning på size kolonne for at konvertere værdien til megabyte (MB).

Sys.database_files-visningen

Der er også en systemvisning kaldet sys.database_files . Vi kan bruge denne visning til at returnere den samme information som i det foregående eksempel:

BRUG WideWorldImporters;VÆLG navn, størrelse, størrelse * 8/1024 'Størrelse (MB)', max_sizeFROM sys.database_files;

Resultat:

navnstørrelse Størrelse (MB) max_size ------------ ------ ---------- ----------WWI_Primær 131072 1024 - 1 WWI_Log 12800 100 268435456WWI_UserData 262144 2048 -1 

Brug en vinduesfunktion

Et potentielt problem med de to foregående eksempler er, at de viser størrelsen af ​​hver fil separat. Dette kan ses som et positivt eller negativt afhængigt af, hvad du ønsker at opnå.

Det kan også argumenteres for, at de første tre løsninger på denne side er problematiske, fordi de kun giver summen af ​​alle filer – de viser ikke hver enkelt fil sammen med dens størrelse.

Så hvad nu hvis du vil se både størrelsen på hver enkelt fil, og summen af ​​alle filer for hver database?

Du kan bruge OVER klausul for at gøre præcis det.

Her er et eksempel:

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_sizeFROM sys.master_files mINNER JOIN sys.databases d ONd.database_id =m.database_id;

Resultat:

Databasefilstørrelse (MB) Database i alt---------------------- --- --------------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 8172 WideWorldImporters 8 world 61 verden 81 verden 81 verden 61 verden 61 verden 61 verden 1 8 

Dette viser hver database, filerne for hver database, filstørrelsen for hver fil, samt summen af ​​alle filer for hver database. Dette kræver, at hver database (og deres samlede størrelse) er opført flere gange (én gang for hver fil).


  1. opdatering af kolonner med et sekvensnummer mysql

  2. JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() i MySQL:Hvad er forskellen?

  3. Fordele vs. ulemper ved at implementere et hybridt cloudmiljø

  4. SQL sammenligningsoperatør