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).