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 27/04/2022 13:13:29

duple
Membre

Maintenance ANALYZE sur une table entraine un out of memory

Bonjour à tous,

On utilise PG 14 sur debian.
Dans la base existe une table de 34GB avec 4 653 064 nb de lignes.
Avant lorsqu'on lançait un ANALYZE sur cette table, l'opération aboutie; mais maintenant lorsqu'on lance l'ANALYZE çà renvoie après un certain temps d'execution :
ERROR:  out of memory
DETAIL:  Failed on request of size 27336 in memory context "BuildRelationExtStatistics".

Je tiens à remarquer que le nombre de lignes de cette table depuis le dernier ANALYZE successful n'a pas beaucoup grandit. Et un repack est planifié chaque week-end pour éviter la fragmentation de la table et de l'index.
L'erreur se produit aussi meme si il y a presque seul ANALYZE, la requête qui se lance dans le sgbd.
=> Pouvez vous indiquer svp, ce qui peut donc être la cause de cette erreur et si existe une autre solution que d'augmenter la RAM ?

Merci d'avance

Hors ligne

#2 27/04/2022 16:52:12

dverite
Membre

Re : Maintenance ANALYZE sur une table entraine un out of memory

Quand ce type d'erreur arrive, il y a normalement du détail dans les logs qui indique combien de mémoire est allouée et comment elle est répartie. Il faudrait voir ce détail et savoir de combien de mémoire libre le serveur dispose quand l'ANALYZE est lancé.

Hors ligne

#3 28/04/2022 14:28:42

duple
Membre

Re : Maintenance ANALYZE sur une table entraine un out of memory

Merci,
Le log PG montre :
LOG:  could not fork new process for connection: Cannot allocate memory (défois il n' y a pas cette trace)
ERROR:  out of memory
DETAIL:  Failed on request of size 118275 in memory context "BuildRelationExtStatistics".
STATEMENT:  VACUUM ANALYZE

le journalctl ne montre rien

Ce qui m'étonne aussi c'est que lorsqu'il fait un ANALYZE d'une autre table plus grande , qui elle fait 48GB avec  50 694 444 nb de lignes, çà passe.

Hors ligne

#4 28/04/2022 14:44:23

ruizsebastien
Membre

Re : Maintenance ANALYZE sur une table entraine un out of memory

bonjour,

Vous faites un vacuum analyze ou un analyze simple ?
Les traces montrent que vous passer par vacuum.
Avec une commande SQL ou via le binaire vacuumdb ?
Dans les 2 cas vous pouvez bénéficier de l'option FREEZE.

Vous pouvez aussi regarder "free -m" au niveau du serveur pour voir ce qu'il en est quand ça passe et quand ça ne passe pas.


Cordialement,

Sébastien.

Hors ligne

#5 28/04/2022 15:42:53

gleu
Administrateur

Re : Maintenance ANALYZE sur une table entraine un out of memory

BuildRelationExtStatistics me fait penser aux statistiques étendues. Auriez-vous créer des objets statistiques pour cette table (avec CREATE STATISTICS) ? Vous pouvez le voir en faisant un "\dX" dans psql ou avec la requête suivante :

SELECT 
es.stxnamespace::pg_catalog.regnamespace::pg_catalog.text AS "Schema", 
es.stxname AS "Name", 
pg_catalog.format('%s FROM %s', 
  pg_catalog.pg_get_statisticsobjdef_columns(es.oid), 
  es.stxrelid::pg_catalog.regclass) AS "Definition",
CASE WHEN 'd' = any(es.stxkind) THEN 'defined' 
END AS "Ndistinct", 
CASE WHEN 'f' = any(es.stxkind) THEN 'defined' 
END AS "Dependencies",
CASE WHEN 'm' = any(es.stxkind) THEN 'defined' 
END AS "MCV"  
FROM pg_catalog.pg_statistic_ext es 
WHERE pg_catalog.pg_statistics_obj_is_visible(es.oid)
ORDER BY 1, 2;

Guillaume.

Hors ligne

#6 29/04/2022 14:39:15

duple
Membre

Re : Maintenance ANALYZE sur une table entraine un out of memory

Merci de vos réponses,

Sébastien, oui que se soit un simple ANALYZE ou un VACUUM ANALYZE çà a renvoyé le out of memory.
Guillaume, effectivement il y en a de stats MCV de créés, vous pensiez que çà serait dù à cela ? En tout cas j'en ai supprimé une récente et maintenant l'ANALYZE passe, seulement je ne comprends toujours pas pourquoi çà consommerait tant de mémoire et pourquoi sur cette table en particulière ?

Merci de l'attention que vous portiez à ce sujet.

Dernière modification par duple (29/04/2022 14:40:27)

Hors ligne

#7 03/05/2022 11:44:02

gleu
Administrateur

Re : Maintenance ANALYZE sur une table entraine un out of memory

Si en supprimant cette statistique étendue, l'ANALYZE passe, c'est que ça devait être ça. Aucune idée de pourquoi cela prend tant de mémoire, surtout sans avoir aucune information sur la définition de la table et de la statistique étendue.


Guillaume.

Hors ligne

#8 04/05/2022 11:04:21

duple
Membre

Re : Maintenance ANALYZE sur une table entraine un out of memory

Ok, en tout cas l'erreur semble disparaitre avec cette action.

Merci de votre aide

Cordialement,

Hors ligne

Pied de page des forums