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

Administration MySQL Discussion :

Taille réelle d'une table


Sujet :

Administration MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Taille réelle d'une table
    Bonjour,

    Je ne parviens pas à résoudre une question concernant l'espace occupé par une de mes tables.

    Voici sa structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE association (
    	elementAid MEDIUMINT UNSIGNED NOT NULL,
    	elementBid MEDIUMINT UNSIGNED NOT NULL,
     
    	FOREIGN KEY (elementAid ) REFERENCES elementA(id)  ON UPDATE CASCADE ON DELETE CASCADE,
    	FOREIGN KEY (elementBid ) REFERENCES elementA(id)  ON UPDATE CASCADE ON DELETE CASCADE,
     
    	PRIMARY KEY (elementAid , elementBid )
    ) Type=InnoDB;
    Je me concentre sur la taille des données, pas des indexes. Nous avons donc 2 champs MEDIUMINT de 3 octets chacun soit 6 octets par ligne. Hors je me rend compte qu'en réalité la table occupe beaucoup plus d'espace quelle ne le devrait (en terme de data, pas d'indexes): 2,637,824 octets au lieu de 58117 (lignes) * 6 octets/ligne = 348,702 octets.

    D'où provient cette différence ?


    Merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Un début d'explication:

    Lorsque MySQL alloue de l'espace pour mémoriser un tuple, il s'adresse à l'OS.

    Ce faisant, l'espace disque ainsi réservé dépend de la taille du cluster qui a été déterminé lors du formatage du disque.
    On peut constater le même phénomène sous Windows: en créant un fichier TXT (par ex), et en y écrivant 1 seul caractère, il occupera 1 Ko, ou 4 Ko ou .... suivant la taille du cluster. On peut vite arriver à des écarts conséquents entre le poids "utile" des données et l'espace physiquement occupé.

    En complément, et sans savoir si ce point s'applique dans ton cas, il faut considérer les opérations sur cette table. En effet, dans le cas ou il y a beaucoup d'insert/delete, il faut savoir que l'espace alloué n'est jamais libéré.

    Pour résoudre ce point, il conviendra peut-être de procéder à une réorganisation.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Je fonctionne sous linux, le FS est du ext3. Je comprends que mysql un petit peu plus d'espace si la taille minimum d'un bloc est inférieure à la taille des données a stocker mais ici la taille occupée est de 4mo alors que les données réelles devrait occuper qu'environ 300ko. La taille de mes blocks vaut 1kio

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    doug@debian:~$ sudo sfdisk -l
     
    Disk /dev/sda: 522 cylinders, 255 heads, 63 sectors/track
    Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
     
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1   *      0+    491     492-   3951958+  83  Linux
    /dev/sda2        492     521      30     240975    5  Extended
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    /dev/sda5        492+    521      30-    240943+  82  Linux swap / Solaris
    J'ai peur d'avoir des soucis plus tard quand ma base va être 10 fois plus volumineuse. Je n'avais pas prévu ce comportement de mysql.

Discussions similaires

  1. Récupérer la taille réelle d'une image
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/07/2013, 14h37
  2. Taille réelle d'une table
    Par Wurlitzer dans le forum Oracle
    Réponses: 17
    Dernier message: 02/04/2012, 10h51
  3. taille maximale d'une table en termes physiques
    Par wisstiti3 dans le forum Administration
    Réponses: 3
    Dernier message: 22/09/2008, 10h18
  4. comment modifier la taille maximale d'une table
    Par mysqldotnet dans le forum Administration
    Réponses: 0
    Dernier message: 14/04/2008, 17h38

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