Ruffal
Messages postés2Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 4 juin 2007
-
1 juin 2007 à 18:10
cs_NonoNantes
Messages postés5Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention25 juin 2009
-
25 juin 2009 à 13:23
Bonjour à vous,
Serait-il possible d'avoir la requete pour obtenir la taille de toutes les tables dans une base sous sql server 2005 ?
cs_NonoNantes
Messages postés5Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention25 juin 20091 12 juin 2009 à 15:18
Salut,
C'est peut-être un peu tard, mais ce topic m'a aidé à trouver la réponse:
Le sp_spacused, fait bien ce que je peux pour une table, et je voulais la même chose pour toutes les tables,
alors j'ai regardé ce que faisait le sp_spaceused, je m'en suis inspiré et voilà ce que j'ai fait :
(ca liste les tables utilisateurs de la base et donne le volume occupé par les données et par les indexs)
select nomTable= object_name(p.object_id),
lignes = sum(
CASE
When (p.index_id < 2) and (a.type = 1) Then p.rows
Else 0
END
),
'mémoire (kb)' = ltrim(str(sum(a.total_pages)* 8192 / 1024.,15,0)) ,
'données (kb)' = ltrim(str(sum(
CASE
When a.type <> 1 Then a.used_pages
When p.index_id < 2 Then a.data_pages
Else 0
END
) * 8192 / 1024.,15,0)),
'indexs (kb)' = ltrim(str((sum(a.used_pages)-sum(
CASE
When a.type <> 1 Then a.used_pages
When p.index_id < 2 Then a.data_pages
Else 0
END) )* 8192 / 1024.,15,0))
from sys.partitions p, sys.allocation_units a ,sys.sysobjects s
where p.partition_id = a.container_id and p.object_id s.id and s.type 'U' -- tables de type Utilisateur (exclusion des tables système
group by p.object_id
order by object_name(p.object_id)
nivsql
Messages postés159Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention14 décembre 20101 22 juin 2009 à 16:02
Je vous proposerais une approche légerement différentes pour optenir ce genre de résultats.
Cette requete présente pour chaque table de chaque schéma la taille de chaque index en Kilo bytes ainsi que le nombres de lignes qu'ils contiennent (SQL 2005 permet la création d'index filtré contenant moins de ligne que la table). Si la table n'a pas d'index cluster la ligne HEAP donne la taille de l'espace "données" de la table, sinon cette espace est celui de l'index cluster.
L'option WITH ROLLUP dans le group by permet d'afficher des totaux par Table, Schéma et bien sur le total final pour la base (le nombre de ligne "de la base" est peu pertinant).
WITH
table_space_usage
--Création d'une CTE pour reccupérer les informations voulues(
nivsql
Messages postés159Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention14 décembre 20101 22 juin 2009 à 16:07
En plus lisible (je me suis fais avoir pour mon premier poste).
WITH
table_space_usage --Création d'une CTE pour reccupérer les informations voulues<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
cs_NonoNantes
Messages postés5Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention25 juin 20091 25 juin 2009 à 13:23
Bonjour,
Effectivement, ce script donne un résultat plus détaillé par index.
Mais je pense que la demande initiale de Ruffal était pas si poussée. En tout cas, pour mon besoin, c'est surtout la ligne TOTAL qui m'intéresse.
(Je note au passage que le détail des résultats comporte quelques octets de différence entre ce script et le mien, je ne sais pas lequel à tort ou raison, mais dans l'esprit ca permet de cibler les plus gourmands en espace.)