79 votes

Déterminer la taille de la base de données du serveur SQL

L'édition Express de SQL Server 2005/2008 est limitée à 4 Go par base de données. Pour autant que je sache, le moteur de base de données ne prend en compte que les données, excluant ainsi les fichiers journaux, l'espace inutilisé et la taille des index.

Obtenir la longueur du fichier MDF ne devrait pas donner la taille correcte de la base de données en termes de limitation du serveur SQL. Ma question est la suivante : comment obtenir la taille de la base de données ?

104voto

David B Points 53123

Sp_spaceused

7 votes

Sp_spaceused prend en compte la taille du fichier journal, donc si vous avez une très petite base de données et un très gros fichier journal, le résultat de sp_spaceused sera trompeur lorsque vous essayerez de déterminer si vous êtes proche de la limite de 4 Go.

77voto

Sp_helpdb

pas de bouclage nécessaire, contrairement à sp_spaceused.

5 votes

Donne la taille de la BD allouée (taille du fichier mdf), pas la taille réelle utilisée.

16voto

devio Points 22981

Selon l'aide de SQL2000, sp_spaceused inclut les données et les index.

Ce script devrait faire l'affaire :

CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18), 
data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))

EXEC sp_msforeachtable 'INSERT INTO #t EXEC sp_spaceused ''?'''
-- SELECT * FROM #t ORDER BY name
-- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY name
SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t
DROP TABLE #t

0 votes

C'est une excellente réponse. Merci pour le script - très utile !

14voto

Ian Nelson Points 20020

Dans SQL Management Studio, cliquez avec le bouton droit de la souris sur une base de données et sélectionnez "Propriétés" dans le menu contextuel. Regardez le chiffre "Taille".

8voto

MAXE Points 1955

La meilleure solution est peut-être de calculer la taille de chaque fichier de base de données, en utilisant la vue sys.sysfiles, en considérant une taille de 8 KB pour chaque page, comme suit :

USE [myDatabase]
GO

SELECT
    [size] * 8
    , [filename]
FROM sysfiles

La colonne [champ] représente la taille du fichier, en pages ( Référence MSDN aux sysfiles ).

Vous verrez qu'il y aura au moins deux fichiers (MDF et LDF) : la somme de ces fichiers vous donnera la taille correcte de la base de données entière...

6 votes

+1 SELECT SUM(size)/128.0 AS size FROM sysfiles renvoie la même valeur que sp_spaceused mais pourrait être plus facile à analyser automatiquement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X