224 votes

Comment trouvez-vous la taille de disque d'une table Postgres / PostgreSQL et ses index

Je viens d’Oracle chez Postgres et je cherche un moyen de trouver la taille de la table et de l’index en termes d’octets / Mo / Go / etc., voire d’améliorer la taille de toutes les tables. Dans Oracle, j'avais une longue requête méchante qui visait user_lobs et user_segments pour donner une réponse. Je suppose que dans Postgres, je peux utiliser quelque chose dans les tables information_schema, mais je ne vois pas où. Merci d'avance.

385voto

aib Points 18608

Essayez les fonctions de taille d'objet de base de données . Un exemple:

 SELECT pg_size_pretty(pg_total_relation_size('"schema"."Table"'));
 

Pour toutes les tables, quelque chose dans les lignes de:

 SELECT
    table_schema || '.' || table_name AS table_full_name,
    pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC
 

Edit: Voici la requête soumise par @phord, pour plus de commodité:

 SELECT
    table_name,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        table_name,
        pg_table_size(table_name) AS table_size,
        pg_indexes_size(table_name) AS indexes_size,
        pg_total_relation_size(table_name) AS total_size
    FROM (
        SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
        FROM information_schema.tables
    ) AS all_tables
    ORDER BY total_size DESC
) AS pretty_sizes
 

Je l'ai légèrement modifié pour utiliser pg_table_size() afin d'inclure des métadonnées et de faire en sorte que les tailles s'additionnent.

213voto

Hendy Irawan Points 4635

Afficher les tailles de base de données:

\l+

par exemple

 => \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 
 

Afficher les tailles de table:

\d+

par exemple

 => \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 
 

Fonctionne uniquement en psql .

(Résumé de la réponse de @ zkutch .)

26voto

zkutch Points 91

Si le nom de la base de données est snort , la phrase suivante lui donne la taille:

 psql snort -c "\l+" | grep snort | awk -F "|" '{print $7}'
 

12voto

Greg Smith Points 5443

Les tables PostgreSQL ont trois composants: la table elle-même, ses index et éventuellement les données TOAST. Quelques exemples montrent comment glisser et dés les informations disponibles de différentes manières sur http://wiki.postgresql.org/wiki/Disk_Usage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X