PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Optimisation » Estimation espace disque pour index » 08/08/2011 17:42:12

Je vous remercie pour ces précieuses informations.

La base de données est utilisée dans une application dont on ne connait pas à l'origine la taille finale de la base de données (de quelques dizaines de Mo à plusieurs centaines de Go). On effectue des tests par remplissage progressif de la base de données via l'application associée.
Mon but est de faire une estimation de l'espace final en corrélation avec le nombre de lignes et les caractéristiques de chaque table (plusieurs millions d'enregistrement dans chaque table).

J'arrive maintenant à calculer l'espace disque nécessaire pour les tables ne contenant pas d'index.
Je suis rendu au calcul de l'espace disque nécessaire pour les index simples et composés B-tree mais cela ne fonctionne pas encore.

#2 Re : Optimisation » Estimation espace disque pour index » 08/08/2011 10:55:22

J'ai effectué le test suivant : création d'une table et remplissage de 10000 enregistrements.

Schéma de la table du test :

CREATE TABLE aaa_vide
(
  champ1 integer,
  champ2 integer,
  champ3 integer,
  champ4 integer,
  champ5 integer,
  champ6 integer,
  champ7 integer,
  champ8 integer,
  champ9 integer,
  champ10 integer
)
WITH (
  OIDS=FALSE
);
ALTER TABLE aaa_vide OWNER TO postgres;

Après remplissage de la table, j'obtiens (par la commande "pg_total_relation_size") une moyenne de 113 enregistrements par page de 8192 octets.
Soit 72,49 octets par enregistrement. Si j’ôte 40 octets (10 intégers), j'obtiens un header de 32 octets.
Comment faire pour vérifier que le header possède bien cette taille (autrement que par corrélation) ?

Mon but étant d'estimer l'espace disque nécessaire pour plusieurs centaines de tables contenant chacune plusieurs millions de lignes (un total de plusieurs centaines de Go d'espace disque au total).

Et ce n'est que le début : je n'ai pas encore ajouter les index.
J'ai cherché sur le net et la doc de postgresql, je n'ai rien trouvé pour effectuer des calculs précis.

#3 Optimisation » Estimation espace disque pour index » 04/08/2011 13:42:37

sech
Réponses : 6

Bonjour,

J'ai fait différentes simulation sous Postgresql 8.2.4 pour estimer la taille de mes bases de données en fonction du nombre de ligne de chaque table.
J'ai toutefois 2 questions :
- j'obtiens un header d'enregistrement de 32 octets. J'ai vu sur une autres contribution qu'il devrait être de 26 octets (http://forums.postgresql.fr/viewtopic.php?id=1075). Pourquoi cette différence ?
- je n'arrive pas à calculer l'espace disque correcte dans le cas d'un index B-tree. Une marge d'erreur augmente progressivement avec la taille de la table. C'est certainement dû à la hauteur de l'arbre d'index. Quelle formule utiliser pour calculer la hauteur de l'arbre et le nombre d'index pour chaque niveau ?

Merci
Sébastien

Pied de page des forums

Propulsé par FluxBB