web-dev-qa-db-fra.com

PostgreSQL: Vue matérialisée rafraîchissante échoue avec "sans espace gauche sur le périphérique" et une énorme pointe d'utilisation du disque

J'ai une vue matérialisée qui rafraîchit toutes les cinq minutes. Le SQL agrége les données entre de nombreuses tables avec plus de 800 000 rangées dans chacune d'elles.

Cependant, lorsque vous utilisez la "Vue matérialisée de rafraîchir le nom simultané", la requête fonctionne pendant environ une heure, puis se plaint: ERROR: could not write block 39760692 of temporary file: No space left on device

Il convient de noter que ce 39760692 change à chaque fois que j'exécute la requête.

La taille du disque est d'environ 960 Go et la taille de la base de données est d'environ 30 Go. Donc, le disque a un espace libre d'environ 930 Go.

J'ai remarqué que lors de l'exécution de la requête de rafraîchissement, il y a une énorme pointe dans l'utilisation du disque d'environ 12 Go par minute et enfin les erreurs de requête sans erreur d'espace lorsqu'il frappe la marque de 960 Go. Immédiatement, l'utilisation du disque est de retour à 30 Go de la croissance anormale.

J'ai même essayé le REFRESH MATERIALIZED VIEW tableName (sans simultanément) et voir le même comportement.

Je ne sais pas ce qui peut être fait ici pour diagnostiquer le problème.

3
Pavan

Trouvez où Postgres écrit des fichiers Temp pour vous et suivez-le pendant l'actualisation. Lorsque vous traitez beaucoup de données dans la base de données, Postgres doit écrire un fichier Temp énorme et, comme cela remplit votre disque, vous obtenez une erreur.

Vous devez probablement trouver un moyen plus efficace d'écrire votre requête.

0
Lauri Huhta