Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

6 façons de vérifier la taille d'une base de données dans SQL Server à l'aide de T-SQL

Si vous utilisez un outil graphique, tel que SSMS pour gérer vos bases de données, vous pouvez facilement vérifier la taille de votre base de données en cliquant sur votre chemin dans l'interface graphique (cliquez avec le bouton droit sur la base de données, pointez sur Rapports , puis Rapports standard, puis cliquez sur Utilisation du disque ).

Cependant, si vous préférez utiliser T-SQL pour gérer vos bases de données, vous devrez exécuter une requête renvoyant ces informations.

Cet article présente six façons de vérifier la taille d'une base de données SQL Server à l'aide de T-SQL.

La procédure stockée sp_spaceused

Il s'agit d'une procédure stockée système qui affiche le nombre de lignes, l'espace disque réservé et l'espace disque utilisé par une table, une vue indexée ou une file d'attente Service Broker dans la base de données actuelle, ou affiche l'espace disque réservé et utilisé par l'ensemble de la base de données.

Pour l'utiliser, il suffit de basculer vers la base de données concernée et d'exécuter la procédure. Comme ceci :

USE WideWorldImporters;
EXEC sp_spaceused;

Résultat :

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

Cela renvoie deux ensembles de résultats qui fournissent les informations pertinentes.

Vous pouvez également fournir un nom d'objet pour renvoyer des données sur un objet spécifique dans la base de données. Dans ce cas, un seul ensemble de résultats sera renvoyé.

Exemple :

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

Résultat :

name    rows                  reserved  data     index_size  unused
------  --------------------  --------  -------  ----------  ------
Cities  37940                 4880 KB   3960 KB  896 KB      24 KB

Dans cet exemple, nous renvoyons des informations sur les Cities tableau uniquement.

La procédure stockée sp_helpdb

Une autre procédure stockée système est sp_helpdb .

Voici un exemple d'appel :

EXEC sp_helpdb N'WideWorldImporters';

Résultat :

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

Dans ce cas, nous passons le nom de la base de données en argument. Nous pouvons également appeler sp_helpdb sans fournir d'argument. Si nous faisons cela, il renverra des informations sur toutes les bases de données dans sys.databases vue du catalogue.

La procédure stockée sp_databases

Encore une autre option est le sp_databases procédure stockée système. Cette procédure stockée répertorie les bases de données qui résident dans une instance de SQL Server ou sont accessibles via une passerelle de base de données.

Voici comment l'exécuter :

EXEC sp_databases;

Résultat :

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

La vue sys.master_files

La procédure stockée ci-dessus interroge les sys.master_files voir. Une alternative consiste donc à accéder directement à la vue et à choisir vos colonnes :

SELECT
    name,
    size,
    size * 8/1024 'Size (MB)',
    max_size
FROM sys.master_files
WHERE DB_NAME(database_id) = 'WideWorldImporters';

Résultat :

name          size    Size (MB)  max_size 
------------  ------  ---------  ---------
WWI_Primary   131072  1024       -1       
WWI_Log       12800   100        268435456
WWI_UserData  262144  2048       -1       

Dans ce cas, nous pouvons voir la taille de chaque fichier de données et fichier journal, car ils sont répertoriés séparément. Vous remarquerez également que j'effectue un calcul sur la size pour convertir la valeur en mégaoctets (Mo).

La vue sys.database_files

Il existe également une vue système appelée sys.database_files . Nous pouvons utiliser cette vue pour renvoyer les mêmes informations que dans l'exemple précédent :

USE WideWorldImporters;
SELECT
    name,
    size,
    size * 8/1024 'Size (MB)',
    max_size
FROM sys.database_files;

Résultat :

name          size    Size (MB)  max_size 
------------  ------  ---------  ---------
WWI_Primary   131072  1024       -1       
WWI_Log       12800   100        268435456
WWI_UserData  262144  2048       -1       

Utiliser une fonction de fenêtre

Un problème potentiel avec les deux exemples précédents est qu'ils répertorient la taille de chaque fichier séparément. Cela peut être considéré comme positif ou négatif selon ce que vous voulez réaliser.

On pourrait également faire valoir que les trois premières solutions de cette page sont problématiques, car elles ne fournissent que la somme totale de tous les fichiers - elles ne répertorient pas chaque fichier individuel avec sa taille.

Et si vous voulez voir à la fois la taille de chaque fichier individuel, et le total de tous les fichiers pour chaque base de données ?

Vous pouvez utiliser le OVER clause pour faire exactement cela.

Voici un exemple :

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;

Résultat :

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       

Cela répertorie chaque base de données, les fichiers de chaque base de données, la taille du fichier pour chaque fichier, ainsi que le total de tous les fichiers pour chaque base de données. Cela nécessite que chaque base de données (et sa taille totale) soit répertoriée plusieurs fois (une fois pour chaque fichier).