L'espace disque de votre base de données
Par footcow le mardi, 18 décembre 2007, 00:55 - PostgreSQL - Lien permanent
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_totale) AS taille_totale_table
FROM (SELECT *,
pg_relation_size(schemaname || '.' || tablename) AS taille,
pg_total_relation_size(schemaname || '.' || tablename) AS taille_totale
FROM pg_tables) AS tables
ORDER BY taille_totale DESC;

Bonjour, Je suis Hervé Piedvache. Footcow est mon pseudo. Passionné d'informatique, Linux, base de données PostgreSQL, développement de logiciels, Emailing et d'Internet en général.
Commentaires
Ca sent le vécu ;o)