Comprendre la mémoire partagée PostgreSQL
PostgreSQL utilise la mémoire qui peut être classifiée comme suit :
- mémoire locale - allouée à chaque processus
- Mémoire partagée - utilisée par tous les processus
Mémoire locale
Chaque processus dans PostgreSQL nécessite de la mémoire pour le traitement des requêtes. Les paramètres de serveur suivants vous permettent de définir l’utilisation de la mémoire :
work_mem définit la mémoire requise pour le tri des tuples pour les opérations ORDER BY et DISTINCT. Ce paramètre détermine la quantité de mémoire disponible pour les opérations de tri internes et les tables de hachage. Si vous disposez d’une grande quantité de mémoire disponible et que votre charge de travail a des requêtes avec un tri complexe, l’augmentation de cette valeur de paramètre peut améliorer les performances en autorisant des analyses plus volumineuses en mémoire avant de se déverser sur le disque.
Toutefois, une requête complexe peut avoir de nombreuses opérations de tri et de hachage s’exécutant simultanément. Chaque opération utilise autant de mémoire que cette valeur le permet avant de commencer à écrire dans des fichiers temporaires sur le disque. Sur un système occupé, par conséquent, l’utilisation totale de la mémoire est plusieurs fois celle d’un paramètre de work_mem individuel.
Pour régler cette valeur, utilisez la RAM totale * 0,25 / max_connections comme valeur initiale.
maintenance_work_mem est la mémoire requise par vide et réindexer. Ce paramètre détermine la quantité de mémoire disponible pour les opérations de tri internes et les tables de hachage. La valeur par défaut est de 64 Ko, mais l’augmentation de cette valeur améliore les performances de l’aspirateur.
autovacuum_work_mem définit la mémoire maximale à utiliser par chaque processus de nettoyage automatique.
temp_buffers définit la mémoire pour stocker des tables temporaires. Ce paramètre définit le nombre maximal de mémoires tampons temporaires utilisées par chaque session de base de données.
effective_cache_size définit la quantité de mémoire disponible pour la mise en cache de disque par le système d’exploitation et dans la base de données. Le planificateur de requêtes PostgreSQL détermine si cette mémoire est fixe dans la RAM. Les analyses d’index sont plus susceptibles d’être utilisées par rapport à des valeurs plus élevées ; sinon, les analyses séquentielles sont utilisées si la valeur est faible.
Définissez effective_cache_size sur 50% de la RAM totale de l’ordinateur.
Mémoire partagée
La mémoire partagée est allouée au démarrage. La mémoire partagée est utilisée pour :
shared_buffers définit les mémoires tampons de mémoire partagée utilisées par le serveur. PostgreSQL charge les pages de tables et d’index du stockage persistant vers un pool de mémoires tampons partagés, puis les utilise en mémoire. Ce pool de mémoires tampons partagées est le composant principal de la mémoire partagée utilisée par le serveur. La valeur par défaut est de 128 Mo (selon le niveau de calcul). Si vous décidez d’allouer plus de mémoire, vous devez redémarrer le serveur.
wal_buffers définit le nombre de tampons de pages de disque dans la mémoire partagée pour la journalisation des écritures anticipées avant de les écrire dans un stockage persistant.
En résumé, les paramètres de serveur importants relatifs à la mémoire que vous souhaitez paramétrer sont les suivants :
- shared_buffers
- work_mem
- taille_de_cache_efficace