SQL Server - La FAQConsultez toutes les FAQ

Nombre d'auteurs : 13, nombre de questions : 119, dernière mise à jour : 31 mai 2011  Ajouter une question

 

Question / réponses à tout ce que vous avez toujours voulu savoir sur Microsoft SQL Server sans jamais oser le demander


SommaireConsulter la taille des objects de la base de données (5)
précédent sommaire suivant
 

Pour connaîttre la taille des objects d'une base de données,
Ms SQL Server met
à votre disposition une procedure stockée:

Code tsql : Sélectionner tout
1
2
sp_spaceused  [[@objname =] 'objname'] <br/> 
[,[@updateusage =] 'updateusage']<br/>
Où objname est le nom de la table dont on veut calculer la
taille et updateusage un varchar(5) qui peut prendre 2 valeurs (false,true).
updateusage, fixé à true permet à MS SQL Serveur de recalculer la taille des
pages de données.
Ainsi, pour connaîttre la taille d'une base de données, on utilise la procedure
sans indiquer le nom de l'object.
Exemple :
Pour connaîttre la taille de la base de donnée DB_ESSAI, on :

Code tsql : Sélectionner tout
1
2
3
4
USE DB_ESSAI 
GO 
EXEC sp_spaceused  
GO

Mis à jour le 28 septembre 2005 WOLO Laurent

Microsoft SQL server met à votre disposition une procédure stockée sp_spaceused
pour déterminer la taille d'une base de données et des tables de la base de données.
Exemple:
A. Informations sur l'espace occupé par une table
Cet exemple présente la quantité d'espace alloué (réservé) à la table titles, l'espace utilisé par les données, l'espace utilisé par le ou les index et l'espace inutilisé réservé par les objets de base de données.

Code tsql : Sélectionner tout
1
2
USE pubs 
EXEC sp_spaceused 'titles'
B. Informations sur l'espace mis à jour occupé par toute une base de données
Cet exemple récapitule l'espace utilisé dans la base de données courante et utilise le paramètre facultatif @updateusage.

Code tsql : Sélectionner tout
1
2
USE pubs 
sp_spaceused @updateusage = 'TRUE'

Mis à jour le 28 septembre 2005 WOLO Laurent

Code tsql : Sélectionner tout
1
2
USE db_essai 
EXEC sp_spaceused 'mon_objet'

Mis à jour le 28 septembre 2005 WOLO Laurent

Code tsql : Sélectionner tout
1
2
3
4
5
6
use myDB 
GO 
SELECT  8 * SUM(CONVERT(DEC(15),SIZE)) as Taillemdf 
 FROM dbo.sysfiles 
WHERE (status64 = 0) 
GO
Code tsql : Sélectionner tout
1
2
3
4
5
6
use myDB 
GO 
SELECT  8 * SUM(CONVERT(DEC(15),SIZE)) as Tailleldf 
 FROM dbo.sysfiles 
WHERE (status64 != 0) 
GO
Le résultat est donné en Ko. En fait, vous avez le résultat en nombre de page de données de 8Ko.

Mis à jour le 28 septembre 2005 Fabien Celaia WOLO Laurent

Grâce à la procédure suivante permettant l'obtention d'informations sur toutes les tables d'une base (nombres de lignes, espace alloué, espace utilisé).

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
create proc Admin_Details_tables 
as 
BEGIN 
-- ------------------------- 
-- I. ACQUISITION DE DONNEES 
-- ------------------------- 
-- Initialisations paramètres divers  
set nocount on       -- ne renvoie pas le nombre de lignes 
set fmtonly off      -- renvoi des données off 
 
-- Création de la table résultat 
create	table  #Admin_taille_tables ( 
		[name]		char(128), 
		rows		char(11), 
		reserved	char(18), 
		data		char(18), 
		index_size	char(18), 
		unused		char(18) ) 
 
-- Variable récupérant le nom des tables via tables 'sysobject' et 'Admin_taille_tables' par curseur  
declare @nom varchar(128) 
 
-- Variables récupérant les valeurs des champs de usr_tables 
declare @rows		char(10),  
		@reserved	char(15),  
		@data		char(15), 
		@index_size char(15),  
		@unused		char(10)   
 
-- Curseur pour obtenir le nom de chaque table via table 'sysobjects' 
declare curs cursor scroll for  
		select name from sysobjects where xtype = 'U '    
open curs	 
fetch next from curs into @nom  
 
-- Enrichissiment de la table 'admin_taille_tables' par 'sp_spaceused' 
while @@fetch_status = 0 
	 begin 
		insert into  #Admin_taille_tables exec sp_spaceused @nom 
		fetch next from curs into @nom   
	end 
close curs 
deallocate curs 
-- ----------------------------------------------------------------------------------------- 
-- II. Suppression des libellé alpha: '123 KB' doit donner '123' pour traitements ultérieurs  
-- ----------------------------------------------------------------------------------------- 
 
-- Lecture de la table 'Admin_taille_tables' pour traitement des données via un curseur 
declare curs cursor scroll for  
		select name, rows, reserved, data, index_size, unused from #Admin_taille_tables  
open curs	 
fetch next from curs into @nom, @rows, @reserved, @data, @index_size, @unused  
 
-- Traitement des données 
while @@fetch_status = 0 
	begin	  
		set @reserved	= substring(@reserved,1,len(@reserved) - 3) 
		set @data		= substring(@data,1,len(@data) - 3) 
		set @index_size	= substring(@index_size,1,len(@index_size)- 3) 
		set @unused		= substring(@unused,1,len(@unused) - 3) 
		begin tran 
			update	#Admin_taille_tables set  
					reserved	= @reserved , 
	 				data		= @data , 
					index_size	= @index_size , 
					unused		= @unused 
			where name = @nom 
		commit tran 
		fetch next from curs into @nom, @rows, @reserved, @data, @index_size, @unused   
	end 
 
close curs 
deallocate curs 
 
-- Alter de la table 'Admin_taille_tables'  
alter table  #Admin_taille_tables	alter column name		varchar(25) 
alter table  #Admin_taille_tables	alter column rows		bigint 
alter table  #Admin_taille_tables	alter column reserved	bigint 
alter table  #Admin_taille_tables	alter column data		bigint 
alter table  #Admin_taille_tables	alter column index_size	bigint 
alter table  #Admin_taille_tables	alter column unused		bigint 
 
 
-- Affichage résultats 
select * from #Admin_taille_tables order by data desc, rows desc 
 
drop table #Admin_taille_tables 
END

Mis à jour le 31 mai 2011 Fabien Celaia Labienus

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique SQL-Server