2017-04-13 1 views
0

Je suis nouveau à PG et en essayant d'exécuter cette requête simple et il se bloque Postgres. La requête fonctionne en quelques secondes si j'essaie seulement de calculer r1, mais dit "Out of memory" si j'essaie de calculer r2 à r6 en plus de r1 comme ci-dessous. Mauvaise conception de requête? Je vais référencer les champs calculés r1 ... r6 dans d'autres calculs, donc je pensais à faire de cette requête une vue. Mes paramètres de fichier de configuration clé sont ci-dessous. Windows 10, PG 9.6, 40 Go de RAM, 64 bits. Des idées sur ce qu'on peut faire? Merci! Édité: J'ai essayé d'ajouter LIMIT 500 à la fin et cela a fonctionné, mais si j'exécute une requête sur cette requête, c'est-à-dire pour utiliser le r1, r2, r3 ... calculé dans une autre requête, la nouvelle requête verra-t-elle? tous les records ou sera-t-il limité à seulement 500?PostgreSQL Config File et Query Design pour les calculs

SELECT 
public.psda.price_y1, 
public.psda.price_y2, 
public.psda.price_y3, 
public.psda.price_y4, 
public.psda.price_y5, 
public.psda.price_y6, 
public.psda.price_y7, 
(price_y1 - price_y2)/nullif(price_y2, 0) AS r1, 
(price_y2 - price_y3)/nullif(price_y3, 0) AS r2, 
(price_y3 - price_y4)/nullif(price_y4, 0) AS r3, 
(price_y4 - price_y5)/nullif(price_y5, 0) AS r4, 
(price_y5 - price_y6)/nullif(price_y6, 0) AS r5, 
(price_y6 - price_y7)/nullif(price_y7, 0) AS r6 
FROM 
public.psda 

Mes paramètres du fichier de configuration:

max_connections = 50 
shared_buffers = 1GB 
effective_cache_size = 20GB 
work_mem = 400MB 
maintenance_work_mem = 1GB 
wal_buffers = 16MB 
max_wal_size = 2GB 
min_wal_size = 1GB 
checkpoint_completion_target = 0.7 
default_statistics_target = 100 
+0

Peut-être apparenté? http://stackoverflow.com/questions/26478031/error-out-of-memory-on-machine-with-32gb-ram-and-without-swap-file – kennytm

+0

Est-ce que 'public.psda' est définitivement une table, ou est -vous une vue? –

+0

@DavidAldridge c'est définitivement une table. Je suis passé à un autre projet, mais je reviendrai bientôt à celui-ci. –

Répondre

1

utiliser ce service http://pgtune.leopard.in.ua/

quand calc total RAM for PostgreSQL = total RAM-RAM for OS

PGTune configuration calculate pour PostgreSQL sur la base des performances maximales pour une configuration matérielle donnée.

Ce n'est pas une solution miracle pour les paramètres d'optimisation de PostgreSQL. De nombreux paramètres dépendent non seulement de la configuration matérielle, mais également de la taille de la base de données, du nombre de clients et de la complexité des requêtes, de sorte que la configuration optimale de la base de données ne peut prendre en compte que tous ces paramètres.