PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 25/09/2018 10:42:40

cecile
Membre

Optimisation des ressources système

Bonjour,

Voici ma configuration :
Red Hat Enterprise Linux Server release 6.7 (Santiago)
Overcommit_memory = 0
overcommit_ratio = 50
swappiness = 5
swap = 4Go
RAM = 32
CPU = 20

PostgreSQL  9.3.5
shared_buffer = 8
max_connection = 560
checkpoint_segments=64

Lorsque l'application est fortement utilisée, PostgreSQL swappe, jusqu'à utiliser tout le swap. Puis, il se plante.
Comment faire pour éviter que PostgreSQL ne swappe pas ?

Cordialement
Cécile

Hors ligne

#2 25/09/2018 10:47:50

gleu
Administrateur

Re : Optimisation des ressources système

Il manque les unités pour la RAM et le shared_buffers, et il manque la valeur des paramètres work_mem et maintenance_work_mem, pour pouvoir donner un avis.

Hors ligne

#3 25/09/2018 10:55:28

cecile
Membre

Re : Optimisation des ressources système

Voici les informations manquantes .
RAM = 32GB
shared_buffer = 8GB
work_mem = 10MB
maintenance_work_mem = 2GB

Merci d'avance.

Hors ligne

#4 25/09/2018 10:59:54

gleu
Administrateur

Re : Optimisation des ressources système

Donc a priori, ça devrait tenir. Il s'agit d'un serveur dédié à PostgreSQL ou d'autres applications sont utilisées ? (style jboss, tomcat, etc)

Hors ligne

#5 25/09/2018 11:04:26

cecile
Membre

Re : Optimisation des ressources système

Oui. Le serveur est dédié.

Hors ligne

#6 25/09/2018 11:14:14

gleu
Administrateur

Re : Optimisation des ressources système

Comme ça, je ne vois aucune raison pour qu'il swappe. La configuration de PostgreSQL semble saine par rapport à la quantité de RAM.

Hors ligne

#7 25/09/2018 11:19:33

cecile
Membre

Re : Optimisation des ressources système

Merci pour le retour. Cependant, la question reste posée.

Hors ligne

#8 25/09/2018 11:20:22

ruizsebastien
Membre

Re : Optimisation des ressources système

Bonjour,

Il faudra voir les processus system qui consomment de la ram au moment où ça swap.
Profitez en pour faire le total de conso RAM de vos process postgres pour voir.


Cordialement,

Sébastien.

Hors ligne

#9 25/09/2018 11:38:22

cecile
Membre

Re : Optimisation des ressources système

Avec top on constate que ce sont les process postgres qui consomment plus de mémoire.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
31591 postgres  20   0 8620m 622m 612m R 15.6  1.9   0:07.63 postmaster
24041 postgres  20   0 9268m 7.6g 7.0g S  5.0 24.2   2:49.10 postmaster
24062 postgres  20   0 9268m 7.6g 7.0g D  4.6 24.3   2:50.10 postmaster
31738 postgres  20   0 8620m 161m 153m D  4.6  0.5   0:00.81 postmaster
31583 postgres  20   0 8618m 129m 122m S  4.3  0.4   0:00.69 postmaster
29676 postgres  20   0 8625m 4.4g 4.4g D  3.3 13.9   0:21.46 postmaster
31593 postgres  20   0 8621m 606m 596m D  3.0  1.9   0:02.62 postmaster
31579 postgres  20   0 8618m 108m 101m S  2.3  0.3   0:00.32 postmaster
31586 postgres  20   0 8620m 273m 264m S  1.7  0.9   0:01.32 postmaster
31690 postgres  20   0 8621m 1.1g 1.1g S  1.7  3.6   0:01.19 postmaster
31739 postgres  20   0 8620m 1.1g 1.1g S  1.0  3.6   0:00.90 postmaster
31002 postgres  20   0 8621m 400m 391m S  0.7  1.2   0:02.61 postmaster
31694 postgres  20   0 8617m  32m  28m S  0.7  0.1   0:00.04 postmaster

Hors ligne

#10 25/09/2018 12:15:15

ruizsebastien
Membre

Re : Optimisation des ressources système

par rapport à la RAM disponible sur le serveur, le max connections, le shared_buffers et maintenance work mem
Je pense qu'il faut soir augmenter la RAM, soit baisser les paramètres mémoire au niveau de postgresql.conf.


Cordialement,

Sébastien.

Hors ligne

#11 25/09/2018 12:21:17

gleu
Administrateur

Re : Optimisation des ressources système

Le problème de top est qu'il mélange mémoire privée du processus et mémoire partagée (par défaut en tout cas). Du coup, un processus postgres peut prendre 8 Go sans consommer du tout de mémoire (si ce sont bien les 8 Go du shared_buffers). Les processus à 7,6 Go sont certainement là depuis longtemps et ont lu beaucoup de données dans le cache, mais ils ne consomment rien. Un "top -c" indiquerait certainement plus d'informations, ainsi qu'ajouter l'affichage de la colonne DATA.

Hors ligne

#12 25/09/2018 12:25:00

gleu
Administrateur

Re : Optimisation des ressources système

@ruizsebastien : pourquoi ? la valeur de ces paramètres est suffisant pour la mémoire su serveur (8 Go de shared_buffers + 560 * les 10 Mo de work_mem + on va dire 5 fois les 2 Go du maintenance_work_mem nous fait arriver à un peu moins de 24 Go, ce qui laisse encore 9 Go).

Hors ligne

#13 25/09/2018 15:02:56

ruizsebastien
Membre

Re : Optimisation des ressources système

oui c'est pour ça que je demandais aussi la liste des processus (hors postgres) et ce qu'ils consomment pour voir.
Sans plus d'infos, ce que je proposais était le minimum à faire pour éviter le swap du serveur.


Cordialement,

Sébastien.

Hors ligne

#14 25/09/2018 16:20:48

dverite
Membre

Re : Optimisation des ressources système

Personnellement j'essaierais avec beaucoup plus de swap, au moins 2 fois la RAM, soit 64GB.

Un swap trop faible fait que le noyau ne peut pas décharger les pages qui ne lui servent pas dans l'immédiat. Du coup il est obligé de swapper plus fréquemment, ce qui aggrave le problème du point de vue de l'utilisateur.


Un autre aspect du problème est que la consommation de RAM dépend des requêtes. Certaines requêtes peuvent être gourmandes. En principe les opérations de jointure, hachage etc...sont capables d'écrire des données temporaires sur disque quand work_mem est dépassé. Mais il peut aussi se tromper dans l'estimation de la mémoire nécessaire et allouer beaucoup plus que prévu. Pour cet aspect-là il faut regarder quelles sont les requêtes en exécution quand les problèmes surviennent et étudier leur conso réelle avec EXPLAIN ANALYZE (commencer peut-être par auto_explain).

Hors ligne

Pied de page des forums