L'éviction du cache limite la quantité de métadonnées que chaque connexion persistante peut accumuler, évitant ainsi les erreurs de mémoire insuffisante (OOM) dans les charges de travail Software as a Service (SaaS) comportant un grand nombre de connexions persistantes. Cette fonctionnalité utilise la politique Least Recently Used (LRU) pour libérer les caches peu utilisés, réduisant l'utilisation de la mémoire par connexion et améliorant la stabilité de l'instance.
Prérequis
Avant de commencer, assurez-vous que :
Votre instance RDS exécute PostgreSQL 11 ou une version ultérieure
Si la fonctionnalité n'est pas encore disponible, mettez à jour la version mineure du moteur de votre instance. Pour plus d'informations, consultez la rubrique Mettre à jour la version mineure du moteur.
Contexte
Chaque fois qu'un processus backend PostgreSQL accède à une table, il met en cache les métadonnées de cette table dans la mémoire locale du processus. Ce cache n'est jamais libéré de manière proactive ; il s'accumule pendant toute la durée de vie de la connexion. Dans les charges de travail comportant de nombreuses connexions persistantes, cela peut épuiser la mémoire disponible et déclencher des erreurs OOM.
Cas d'utilisation
Applications SaaS qui maintiennent un grand nombre de connexions de base de données persistantes
Remarques d'utilisation
Certains caches ne peuvent pas être évincés afin de garantir le bon fonctionnement de l'instance. Dans des cas extrêmes, la limite de cache configurée peut ne pas être entièrement appliquée.
La modification des paramètres décrits dans cette rubrique ne déclenche pas le redémarrage de l'instance.
Concepts clés
ApsaraDB RDS for PostgreSQL gère trois types de caches de connexion :
| Type de cache | Contenu stocké | Limite configurable |
|---|---|---|
relcache |
Métadonnées des tables utilisateur | Oui — rds_relcache_max_cached_relations |
syscache |
Tuples des tables système | Oui — rds_syscache_max_cached_tuples |
plancache |
Plans d'exécution définis par l'utilisateur | Non |
Configurer l'éviction du cache
Pour la connexion actuelle
Exécutez les instructions SQL suivantes pour définir des limites uniquement pour la session actuelle.
-- Limit relcache to 1,000 user tables for the current connection
SET rds_relcache_max_cached_relations = 1000;
-- Remove the relcache limit for the current connection
SET rds_relcache_max_cached_relations = -1;
-- Limit syscache to 10,000 system table tuples for the current connection
SET rds_syscache_max_cached_tuples = 10000;
-- Remove the syscache limit for the current connection
SET rds_syscache_max_cached_tuples = -1;
Pour toutes les connexions
Définissez rds_relcache_max_cached_relations et rds_syscache_max_cached_tuples dans la console ApsaraDB RDS pour appliquer des limites à l'ensemble de l'instance. Pour plus d'informations, consultez la rubrique Modifier les paramètres d'une instance ApsaraDB RDS for PostgreSQL.
Surveiller l'utilisation du cache par processus
Pour surveiller l'utilisation du cache pour chaque connexion, installez l'extension rdsutils et activez le paramètre de surveillance du cache.
-
Installez l'extension :
CREATE EXTENSION rdsutils; Dans la console ApsaraDB RDS, définissez
rds_enable_cache_monitorsuron. Vous pouvez modifier le paramètrerds_enable_cache_monitoruniquement dans la console ApsaraDB RDS. Pour plus d'informations, consultez la rubrique Modifier les paramètres d'une instance ApsaraDB RDS for PostgreSQL.
L'activation de rds_enable_cache_monitor ajoute environ 2 ms de surcharge par instruction SQL.
Paramètres
| Paramètre | Description | Valeurs valides | Par défaut | Valeur minimale recommandée |
|---|---|---|---|---|
rds_enable_cache_monitor |
Surveille l'utilisation du cache par connexion. | on, off |
off |
— |
rds_relcache_max_cached_relations |
Nombre maximal de tables utilisateur mises en cache par connexion. Définissez ce paramètre sur -1 pour désactiver la limite. Si vous utilisez des tables partitionnées ou l'extension timescaledb, définissez cette valeur sur -1 ou sur une valeur élevée. |
-1 à INT_MAX |
-1 (illimité) |
1000 |
rds_syscache_max_cached_tuples |
Nombre maximal de tuples de tables système mis en cache par connexion. Définissez ce paramètre sur -1 pour désactiver la limite. Si vous utilisez des tables partitionnées ou l'extension timescaledb, définissez cette valeur sur -1 ou sur une valeur élevée. |
-1 à INT_MAX |
-1 (illimité) |
5000 |
La définition derds_relcache_max_cached_relationsou derds_syscache_max_cached_tuplessur une valeur trop faible peut dégrader les performances des requêtes. Dimensionnez les limites en fonction du nombre de tables et de champs auxquels votre charge de travail accède. Si votre charge de travail accède à de nombreuses tables, utilisez une valeur plus élevée.