Documentation PostgreSQL 14.22 » Annexes » Modules supplémentaires fournis » pg_freespacemap

Précédent | Niveau supérieur | Suivant
F.26. pgcrypto | Sommaire | F.28. pg_prewarm

## F.27. pg_freespacemap

Le module `pg_freespacemap` fournit un moyen pour examiner la carte des espaces libres (free space map, FSM). Il fournit une fonction appelée `pg_freespace`, ou plus précisément deux fonctions qui se surchargent. Les fonctions indiquent la valeur enregistrée dans la carte des espaces libres pour une page donnée ou pour toutes les pages de la relation.

Par défaut l'utilisation est restreinte aux super-utilisateurs et aux membres du rôle `pg_stat_scan_tables`. L'accès peut être accordé à d'autres en utilisant `GRANT`.

### F.27.1. Fonctions

`pg_freespace(rel regclass IN, blkno bigint IN) returns int2`

  Renvoit la quantité d'espace libre dans la page de la relation, spécifiée par `blkno`, d'après la FSM.

`pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)`

  Affiche la quantité d'espace libre sur chaque page de la relation suivant la FSM. Un ensemble de lignes du type `(blkno bigint, avail int2)` est renvoyé, une ligne pour chaque page de la relation.

Les valeurs stockées dans la carte des espaces libres ne sont pas exactes. Elles sont arrondies à une précision de 1/256ᵉ du `BLCKSZ` (32 octets pour un `BLCKSZ` par défaut), et elles ne sont pas parfaitement mises à jour quand des lignes sont insérées et mises à jour.

Pour les index, sont tracées les pages entièrement inutilisées, plutôt que l'espace vide au sein des pages. En conséquence, les valeurs ne sont pas significatives. Elles indiquent simplement si la page est en cours d'utilisation ou vide.

### F.27.2. Exemple de sortie

    postgres=# SELECT * FROM pg_freespace('foo');
     blkno | avail
    -------+-------
         0 |     0
         1 |     0
         2 |     0
         3 |    32
         4 |   704
         5 |   704
         6 |   704
         7 |  1216
         8 |   704
         9 |   704
        10 |   704
        11 |   704
        12 |   704
        13 |   704
        14 |   704
        15 |   704
        16 |   704
        17 |   704
        18 |   704
        19 |  3648
    (20 rows)

    postgres=# SELECT * FROM pg_freespace('foo', 7);
     pg_freespace
    --------------
             1216
    (1 row)

### F.27.3. Auteur

Version originale par Mark Kirkwood `<markir@paradise.net.nz>`. Ré-écrit en version 8.4 pour s'adapter à la nouvelle implémentation de la FSM par Heikki Linnakangas `<heikki@enterprisedb.com>`