Comment vérifier si j'atteins la limite de taille de l'édition Express?


10

Je suis confus. AFAIK SQL Server 2005 Express a une limite de 4 Go de données de base de données . Cependant, j'ai les résultats suivants de sp_spaceused:

quelle est la taille réelle de la base de données

  1. Comment puis-je vérifier si ma base de données atteint la limite de taille?
  2. L'espace non alloué est-il space leftjusqu'à ce que j'atteigne la limite?
  3. Combien d'espace me reste-t-il?
  4. index_sizeCompte- t-il dans la limite?

Vous pouvez vérifier la colonne backup_size de msdb.dbo.backupset.

Réponses:


6

Voici un bon script que j'ai arraché sans vergogne d' ici :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

C'est bien car cela vous donnera l'espace libre dans chaque fichier DB (vous pouvez avoir plusieurs fichiers et peut-être que quelqu'un l'a configuré pour mettre des objets dans chacun) ainsi que la taille libre.

Par exemple, vous disposez d'un fichier de données de 4 Go qui dispose de 3 Go d'espace libre. Peut-être que vous avez 1 MDF sans beaucoup de données mais un NDF avec beaucoup de données. Cette requête vous indiquera la taille libre dans chaque fichier et à quelle DB ce fichier est alloué. N'oubliez pas d'ajouter tous les «SPACE_USED_MB» pour chaque base de données pour obtenir la taille totale.

Bonne chance!

Edit: Suppression d'une commande non prise en charge et boguée que je pensais pouvoir obtenir en publiant ici pour cette requête. :(



PS: si vous souhaitez utiliser d'anciennes vues de compatibilité descendante, vous pouvez simplifier cela un peu en utilisant sysaltfiles(cela annule la nécessité d'aller dans chaque base de données).
Aaron Bertrand

1
Merci Aaron pour les sysaltfiles, je n'ai pas encore examiné celui-là! sp_msforeachdb a beaucoup de problèmes douloureux, mais j'ai pensé à une installation SQL Express où le gars veut juste exécuter une requête pour voir combien d'espace libre il a, c'est bien.
Ali Razeghi

Sauf quand il saute des bases de données et ne déclenche pas d'erreur ...
Aaron Bertrand

Oui, mais dans ce cas, pensez-vous vraiment que ce sera un problème où l'utilisateur final veut juste un décompte de taille de base de données? Je suppose que je ne devrais pas le publier même dans les cas où l'utilisateur final verra absolument s'il a ignoré la base de données qu'il recherche afin de ne pas renforcer les mauvais comportements. Je vais juste supprimer cette partie à ce stade, vous avez raison, nous n'avons pas besoin que cette commande soit plâtrée ailleurs.
Ali Razeghi

5

La taille de la base de données est la taille du fichier. Regardez la taille réelle du fichier de données (le journal des transactions ne compte pas). Oui, les index comptent. Si vous manquez d'espace, envisagez une mise à niveau vers SQL 2012 Express car cela augmente la limite de taille à 10 Go.


6
SQL Server 2008 R2 Express a également une limite de 10 Go (juste pour être complet)
marc_s

1

Lorsque sp_spaceused affiche la taille de la base de données d'environ 25 Go dans votre premier jeu de résultats, qui inclut le fichier / index de données et le journal des transactions. Seules les données et les index réels comptent dans les limites de SQL Server Express, vous disposez donc d'environ 3,3 Go de données (comme dans votre deuxième jeu de résultats) et les 22 Go restants seront le journal des transactions. Si vous exécutez "sp_helpdb", cela montre l'image réelle, car elle indique l'utilisation des données et l'utilisation du journal des transactions sur deux lignes distinctes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.