Aller au contenu | Aller au menu | Aller à la recherche

L'espace disque de votre base de données

Votre base de données est volumineuse ... vous voyez aisément l'espace utilisé par le répertoire qui stocke vos données, mais quand est-il d'une table en particulier ? Comment se rendre compte facilement du volume que représente ces millions de données que vous gérez au quotidien ? Votre espace disque de stockage principal commence sérieusement à s'amoindrir ... ne serait-il pas temps de créer un nouveau tablespace pour optimiser les accès sur un autre espace disque ?

Des questions qui assurément vous sont venus un jour ou l'autre, et qui sont très faciles à connaître avec PostgreSQL.

Connaître le nombre d'octets utilisés pour stocker une valeur en particulier :

base=# SELECT pg_column_size('1');
 pg_column_size
----------------
              2

base=# SELECT pg_column_size(1);
 pg_column_size
----------------
              4

Connaître l'espace disque utilisé par une database complète :

base=# SELECT pg_database_size('base');
 pg_database_size
------------------
     128254784136

Connaître l'espace disque utilisé sur un tablespace :

base=# SELECT pg_tablespace_size('data2');
 pg_tablespace_size
--------------------
        53866725380

Connaître la taille d'une table ou d'un index par son nom :

base=# SELECT pg_relation_size('my_table');
 pg_relation_size
------------------
      10714234880

Connaître la taille représentée par une table, en incluant toutes les données liées (index, toast) :

base=# SELECT pg_total_relation_size('my_table');
 pg_total_relation_size
------------------------
            24756928512

Naturellement les octets ne sont pas le moyen le plus facile de lire une représentation d'un volume de données, il existe heureusement la commande pg_size_pretty(int) qui permet d'obtenir des chiffres humainement lisibles :

base=# SELECT pg_size_pretty(pg_total_relation_size('my_table'));
 pg_size_pretty
----------------
 23 GB

Enfin, une requête qui vous donne un rapide aperçu de l'ensemble de vos données ... à utiliser sans modération :

SELECT schemaname, tablename, tablespace, pg_size_pretty(taille) AS taille_table, pg_size_pretty(taille_index), pg_size_pretty(taille_totale) AS taille_totale_table, pg_size_pretty(taille_totale - (taille_index + taille)) as toast_size
  FROM (SELECT *,
               pg_relation_size(schemaname || '.' || tablename) AS taille,
               pg_total_relation_size(schemaname || '.' || tablename) AS taille_totale, pg_indexes_size(schemaname || '.' || tablename) as taille_index
          FROM pg_tables) AS tables
 ORDER BY taille_totale DESC;

Commentaires

1. Le jeudi 20 décembre 2007, 12:44 par Silvia

Ca sent le vécu ;o)

La discussion continue ailleurs

URL de rétrolien : https://www.footcow.com/index.php?trackback/37

Fil des commentaires de ce billet