Chapitre 24. Surveillance de l'utilisation de l'espace disque

Table des mati�res
24.1. D�terminer l'utilisation de l'espace disque
24.2. �chec sur disque plein

Ce chapitre traite de la mani�re d'effectuer une surveillance sur l'utilisation de l'espace disque par un syst�me de bases de donn�es PostgreSQL. Dans la version actuelle, l'administrateur de la base de donn�es ne dispose pas de beaucoup de moyens de contr�les sur la mani�re dont les donn�es sont stock�es sur les disques. Ce chapitre est donc surtout informatif et peut vous donner une id�e plus pr�cise de la mani�re de g�rer les disques en utilisant plut�t les outils fournis avec le syst�me d'exploitation.

24.1. D�terminer l'utilisation de l'espace disque

Chaque table poss�de un fichier d'en-t�te principal dans lequel la plupart des donn�es sont stock�es. Afin de stocker les donn�es des grosses colonnes, un fichier TOAST est �galement associ� � la table dont le nom est bas� sur l'OID (en fait il s'agit de pg_class.relfilenode). Pour finir, on lui associe un index dans la table TOAST. Il peut y avoir par ailleurs d'autres index associ�s � la table de base.

Vous pouvez surveiller l'espace disque en utilisant trois m�thodes : depuis psql en utilisant les r�sultats de la commande VACUUM, depuis psql en utilisant l'outil se trouvant dans contrib/dbsize, et depuis la ligne de commande en utilisant l'outil contenu dans contrib/oid2name. En utilisant psql sur une base de donn�es sur laquelle ont �t� lanc�s VACUUM ou ANALYZE, vous pouvez lancer des requ�tes vous permettant d'obtenir des informations sur la place occup�e par n'importe quelle table :

SELECT relfilenode, relpages FROM pg_class WHERE relname = 'customer';

 relfilenode | relpages 
-------------+----------
       16806 |       60
(1 ligne)

Chaque page utilise en g�n�ral 8 Ko de d'espace disque (ne pas oublier que relpage n'est mis � jour que par l'utilisation des commandes VACUUM et ANALYZE.)

Afin de conna�tre l'espace disque utilis� par les tables TOAST, lancez une requ�te similaire � la suivante en rempla�ant le nombre du relfilenode de la table (d�fini par la requ�te ci-dessus) :

SELECT relname, relpages
    FROM pg_class
    WHERE relname = 'pg_toast_16806' OR relname = 'pg_toast_16806_index'
    ORDER BY relname;

       relname        | relpages 
----------------------+----------
 pg_toast_16806       |        0
 pg_toast_16806_index |        1

Vous pouvez afficher �galement la taille des index :

SELECT c2.relname, c2.relpages
    FROM pg_class c, pg_class c2, pg_index i
    WHERE c.relname = 'customer'
        AND c.oid = i.indrelid
        AND c2.oid = i.indexrelid
        ORDER BY c2.relname;

       relname        | relpages 
----------------------+----------
 customer_id_indexdex |       26

Vous pouvez trouver les tables les plus grosses en utilisant la requ�te suivante :

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

       relname        | relpages 
----------------------+----------
 bigtable             |     3290
 customer             |     3144

contrib/dbsize cr�e dans votre base de donn�es des fonctions permettant de trouver la taille des tables ou de la base de donn�es � partir de psql sans avoir besoin d'ex�cuter VACUUM ou ANALYZE pr�alablement.

Vous pouvez aussi utiliser l'utilitaire contrib/oid2name afin d'afficher l'utilisation du disque. Lisez les exemples contenus dans le fichier README.oid2name dans ce m�me r�pertoire. Il inclut un script permettant d'afficher la quantit� de disque utilis�e par chaque base de donn�es.