Le module pg_freespacemap
fournit un moyen pour examiner
la carte des espaces libres
(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 superutilisateurs et aux rôles
disposant des attributs du rôle pg_stat_scan_tables
.
L'accès peut être accordé à d'autres en utilisant GRANT
.
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/256th 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 remplie ou vide.
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)
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>