L'espace disque de votre base de données
Par admin 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_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
Ca sent le vécu ;o)