Bonjour,

j'ai une question concertant les performances postgres en update sur une table.

J'ai une table contenant environ 22 millions de ligne, 21 colonnes et 5 index. Je fait un VACUUM ANALYZE sur la table et des REINDEX des 5 index. Toutes les stats sont à jour.

J'ai une colonne qui est "null" sur la totalité des données, je fais un simple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
update schema.table set champ = '-1';
et il prend 75 minutes ! sans aucune clause where. Comment expliquer cette lenteur ?

Second effet kisskool, une fois l'update réalisé la table est complètement en vrac et ne répond même plus dans des temps raisonnable à un count(*), je suis obligé de refaire un VACUUM ANALYZE qui met 10min ! A partir de là ma table est de nouveau opérationnelle.

Je précise que j'ai un serveur postgres conséquent avec 128Go de ram et 12 cpu. Quelques éléments de configuration :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
work_mem = 128MB
maintenance_work_mem = 4GB
effective_cache_size = 48GB
wal_buffers = 16MB
shared_buffers = 32GB
max_connections = 200
autovacuum = off (nous chargeons les données la nuit puis vacuum analyze et création des index vers 6h matin, aucun update/insert/delete en journée)
Peut être que la conf n'est pas bonne n'étant pas expert en Postgres ? ou que j'ai raté quelque chose ?

Merci pour vos retours.