IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

[ASE]Calcul de la taille de mes tables


Sujet :

Sybase

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Points : 182
    Points
    182
    Par défaut [ASE]Calcul de la taille de mes tables
    Bonjour à tous, je suis confronté a des contraintes de temps et dés lors je voudrais savoir comment voir la taille de toutes les tables en une seul requète ..
    Je suppose qu'il faut taper sur sysobjects, mais si qq'un a déja un truc utilisable merci par avance ...

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Taille par segment, pour ASE 12.5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    set arithabort off
     
    select s.segment
         , "total_space" = convert(float, sum(u.size)) * @@maxpagesize/(1024.0 * 1024.0)
         , "free_space" = case when s.segment = 2
              then 
                convert(float, sum(lct_admin("logsegment_freepages", db_id()))) * @@maxpagesize / (1024.0 * 1024.0)
              else
                convert(float, sum(curunreservedpgs(u.dbid, u.lstart, u.unreservedpgs))) * @@maxpagesize / (1024.0 * 1024.0)
           end
         , s.name
      into #segments
      from master..sysusages u
         , syssegments s
     where u.dbid = db_id()
       and (power(2, s.segment) & u.segmap) = power(2, s.segment)
     group by s.segment, s.name
     
    select i.id
         , "used" = convert(float, reserved_pgs(i.id, i.doampg)) * @@maxpagesize / (1024.0 * 1024.0)
         , i.segment
      into #used
      from sysobjects o
         , sysindexes i
     where o.id = i.id
       and i.indid < 2
       and o.sysstat2 & 57344 in (32768, 16384)
     
    select o.name
         , i.used
         , i.segment
         , s.name
         , s.free_space
         , "pct" = s.free_space / i.used
      from sysobjects o
         , #used i
         , #segments s
     where o.id = i.id
       and i.segment = s.segment
     
    drop table #segments
    drop table #used
    Ce listing done aussi la place disponible dans le segment sur lequel la table est placée.

    Michael

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par mpeppler
    Taille par segment, pour ASE 12.5:
    Merci bien pour cette rêquete, je suis assez novice dans le domaine de l'administration.
    Peux-tu donner plus d'informations, détailler si possible les requêtes ?
    A quoi correspond l'option "arithabort" ?
    Merci.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Points : 182
    Points
    182
    Par défaut
    Merci pour la requète moi j'ai fais cette requète nettement plus succinte et moins complète mais quand même
    ;-)
    A+
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select sysobjects.name, sysobjects.loginame, space_used_kb=sum(used_pgs(sysobjects.id, doampg, ioampg) * 4)
    from sysindexes, sysobjects
    where sysobjects.id > 100 and sysobjects.type = 'U'
    and sysindexes.id = sysobjects.id
    group by sysobjects.id, sysobjects.loginame
    order by space_used_kb

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Citation Envoyé par lsone
    Merci bien pour cette rêquete, je suis assez novice dans le domaine de l'administration.
    Peux-tu donner plus d'informations, détailler si possible les requêtes ?
    A quoi correspond l'option "arithabort" ?
    Merci.
    arithabort permet de contrôler le comportement en cas d'erreur arithmetique (division par 0, par example).

    Pour le reste:

    La première requète (sur syssegments et sysusages) permet de déterminer le mapping des segments par rapport aux fragments de disques définis pour la base. Je rappelle que les segments sont utilisés pour placer un objet sur un device particulier - sans action particulière une base comporte les segment "system", "logsegment" et "default". On peut ajouter des segments via sp_addsegment et placer des objets (tables, indexes) sur des segments spécifique via create ... on nom_segment, par example. Le mapping des segments se fait via un "et" binaire d'où la condition de jointure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and (power(2, s.segment) & u.segmap) = power(2, s.segment)
    La deuxième requète donne la taille de chaque objet par segment. La condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and o.sysstat2 & 57344 in (32768, 16384)
    limite la liste des objets aux tables en mode DOL (datapages et datarows locking). C'est une clause que j'ai oublié d'enlever de ma requète originale (c'est pris d'un script qui valide qu'il y a suffisamment de place dans le segment pour faire un REORG REBUILD...)

    La troisième requète est purement une requète de présentation, qui peut évidemment être combinée avec la requète précédente...

    Michael

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Points : 182
    Points
    182
    Par défaut
    Merci ;-)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par mpeppler
    Merci beaucoup, c'est plus clair !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/02/2013, 13h39
  2. Oracle9i : Augmentation de la taille de mes table
    Par sofiane_bfm007 dans le forum Forms
    Réponses: 2
    Dernier message: 07/05/2008, 20h40
  3. [ASA]Connaitre la taille de mes tables
    Par madina dans le forum SQL Anywhere
    Réponses: 3
    Dernier message: 27/03/2008, 16h53
  4. taille d'une table
    Par jean-jacques varvenne dans le forum Oracle
    Réponses: 11
    Dernier message: 29/12/2004, 13h17
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo