Précédent   Forum du club des développeurs et IT Pro > Bases de données > Sybase > Adaptive Server Enterprise
Adaptive Server Enterprise Forum d'entraide concernant Sybase Adaptive Server Enterprise, le dataserver phare de Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/03/2011, 13h09   #1
tibal
Membre confirmé
 
Inscription : octobre 2006
Messages : 449
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 449
Points : 225
Points : 225
Par défaut Connaître la taille d'une table

Bonjour,

Je souhaite récupérer la taille d'une table sans avoir à passer par sp_spaceused, simplement par du SQL. J'ai regardé le code du sp_spaceused, ça me semble bien compliqué et je n'ai pas besoin de toutes les informations remontées. Si l'un d'entre vous possède une requête SQL et veuille bien la fournir, je suis preneur.

Merci d'avance pour votre aide.
tibal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 11h24   #2
mpeppler
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Âge : 53

Informations forums :
Inscription : janvier 2006
Messages : 1 307
Points : 1 643
Points : 1 643
Envoyer un message via AIM à mpeppler
En 15.x, pour connaitre la taille de la table (y compris les indexes) (en MB):

Code :
1
2
 
SELECT data_pages(db_id('nom_db'), object_id('nom_table')) * @@maxpagesize / 1024e / 1024e
Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/04/2011, 19h25   #3
tibal
Membre confirmé
 
Inscription : octobre 2006
Messages : 449
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 449
Points : 225
Points : 225
Merci Michael.
tibal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 19h36   #4
tibal
Membre confirmé
 
Inscription : octobre 2006
Messages : 449
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 449
Points : 225
Points : 225
Michael,
Par contre, lorsque je lance un sp_spaceused sur une table, j'obtiens ce qui suit :
Code :
1
2
3
4
5
6
7
8
1> sp_spaceused T_CHAMBRE
2> go
 name               rowtotal         reserved         DATA     index_size           unused
 ------------------ ---------------- ---------------- -------- -------------------- ------------
 T_CHAMBRE          20               128 KB           8 KB     8 KB                 112 KB
 
(1 row affected)
(RETURN STATUS = 0)
Lorsque j'utilise ta ligne de script, voici le résultat :
Code :
1
2
3
4
5
6
7
1> SELECT data_pages(db_id('hotel'), object_id('T_CHAMBRE')) * @@maxpagesize / 1024e / 1024e
2> go
 
 ---------------------------
                    0.015625
 
(1 row affected)
D'ou provient cette différence ?
tibal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 19h54   #5
tibal
Membre confirmé
 
Inscription : octobre 2006
Messages : 449
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 449
Points : 225
Points : 225
Michael,
En fait, j'ai trouvé. Il faut y ajouter les reserved_page. Néanmoins, une petite différence subsiste :
Code :
1
2
3
4
5
6
7
1> SELECT (data_pages(db_id('hotel'), object_id('T_CHAMBRE')) + reserved_pages(db_id('hotel'), object_id('T_CHAMBRE')))  * @@maxpagesize / 1024e / 1024e
2> go
 
 ---------------------------
                    0.140625
 
(1 row affected)
D'où cela peut-il provenir ?
Merci d'avance.
tibal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 18h03   #6
A Cherry Tells
Invité de passage
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 2
Points : 2
En sybase 11.9, nous utilisons

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SELECT "name"            = @@servername+"."+db_name()+"."+o.name,
       "lockrow"         = case when ((sysstat2 & 49152) = 0) then "allpages"
                                when ((sysstat2 & 32768) > 0) then "datarows"
                                else "datapages" end,
       "rowtotal"        = convert(numeric(10,0),sum(rowcnt(i.doampg))),
       "reserved"  		 = convert(numeric(10,0),sum(convert(numeric(32, 9), (reserved_pgs(i.id, i.doampg) + reserved_pgs(i.id, i.ioampg))) * (low / 1024))),
       "data_size"		 = convert(numeric(10,0),sum(convert(numeric(32, 9), data_pgs(i.id, i.doampg)) * (low / 1024))),
       "index_size"		 = convert(numeric(10,0),sum(convert(numeric(32, 9), data_pgs(i.id, i.ioampg)) * (low / 1024))),
       "unused"		     = convert(numeric(10,0),sum(convert(numeric(32, 9), ((reserved_pgs(i.id, i.doampg) + reserved_pgs(i.id, i.ioampg)) - (data_pgs(i.id, i.doampg) + data_pgs(i.id, i.ioampg)))) * (low / 1024)))  
FROM master.dbo.spt_values d,
       sysobjects o,
       sysindexes i
WHERE o.type IN ('U', 'S')
   AND o.id = i.id
   AND d.number = 1
   AND d.type = "E"
  GROUP BY o.id
  ORDER BY 4 DESC
je note l'utilisation de low au lieu de @@maxpagesize.

Si cela peut aider.
A Cherry Tells est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h06.


 
 
 
 
Partenaires

Hébergement Web