Extension pg_prewarm
1. Qu’est-ce que pg_prewarm ?
pg_prewarm
est une extension native de PostgreSQL qui permet de précharger les pages de données en mémoire (cache partagé de PostgreSQL ou cache de l’OS). Cela réduit les temps d’accès aux données en évitant de devoir les récupérer directement depuis le disque.
Elle est particulièrement utile dans les scénarios suivants :
- Après un redémarrage : PostgreSQL vide son cache mémoire, et
pg_prewarm
permet de recharger rapidement les pages fréquemment utilisées. - Sur des bases de données à forte charge : Améliorer les temps de réponse en préchargeant les index et les tables critiques.
- Optimisation des performances après un vidage de cache (par exemple après un
pg_prewarm
en maintenance ou un changement de configuration).
2. Installation et Activation de pg_prewarm
L’extension pg_prewarm
est incluse par défaut dans PostgreSQL depuis la version 9.4, mais elle n’est pas activée par défaut. Pour l’utiliser, vous devez d’abord l’installer .
L’installation de pg_prewarm
peut être réalisée sur diverses infrastructures, qu’elles soient on-premise ou dans le cloud.
- on-premise, il suffit généralement de suivre les étapes classiques de configuration de PostgreSQL, en veillant à ce que les dépendances nécessaires soient installées.
- Sur AWS, l’installation se fait sur une instance EC2 avec PostgreSQL, en prenant en compte la configuration des ressources et des performances du cloud. Quant à Azure, l’installation est similaire, en déployant PostgreSQL sur une machine virtuelle ou en utilisant un service managé, tout en ajustant les paramètres en fonction des spécificités du cloud.
Activer l’extension au niveau de la base de données :
CREATE EXTENSION pg_prewarm;
Une fois l’extension activée, vous pouvez commencer à l’utiliser pour précharger vos données en mémoire.
3. Modes de Préchargement avec pg_prewarm
L’extension propose plusieurs méthodes pour charger les données en mémoire :
- Mode « buffer » (par défaut) : Charge les pages directement dans le cache partagé de PostgreSQL.
- Mode « disk » : Demande au système d’exploitation de mettre en cache les pages dans la mémoire du système.
- Mode « prefetch » : Indique au système d’exploitation de précharger les pages sans les forcer immédiatement en cache.
Exemples d’utilisation :
3.1. Précharger une table entière
SELECT pg_prewarm(‘table’);
Cela précharge la table ma_table
dans le cache partagé de PostgreSQL.
3.2. Précharger un index spécifique
SELECT pg_prewarm(‘index’);
Cela est utile si vos requêtes utilisent fréquemment cet index.
3.3. Utiliser un mode spécifique
SELECT pg_prewarm(‘table’, ‘disk’);
Ici, les pages seront préchargées dans le cache de l’OS et non dans celui de PostgreSQL.
4. Automatiser le Préchargement après un Redémarrage
Pour s’assurer que les données importantes sont bien préchargées après un redémarrage, vous pouvez automatiser cette tâche via un trigger ou un job de maintenance.
Exemple avec une entrée dans le cron PostgreSQL (via pg_cron
) :
SELECT cron.schedule(‘*/10 * * * *’, $$SELECT pg_prewarm(‘table’);$$);
Cette commande précharge mtable
toutes les 10 minutes.
5. Suivi et Analyse du Cache
PostgreSQL fournit plusieurs vues pour analyser l’utilisation du cache et l’efficacité du préchargement :
Vérifier le taux de cache hit :
SELECT sum(blks_hit) / sum(blks_hit + blks_read) AS cache_hit_ratio
FROM pg_stat_database;
Ce ratio permet d’évaluer l’efficacité du cache : une valeur proche de 1.0
signifie que la majorité des requêtes sont servies depuis la mémoire.
Vérifier l’utilisation des buffers :
SELECT relname, pg_size_pretty(pg_relation_size(oid))
FROM pg_class
WHERE relname = ‘table’;