2017-04-13 47 views
0

我是新來的PG和試圖運行這個簡單的查詢,它是崩潰的Postgres。如果我只嘗試計算r1,查詢將在幾秒鐘內運行,但如果我嘗試通過除r1之外的r6計算r2至r2,則表示「內存不足」,如下所示。糟糕的查詢設計?我將在其他計算中引用計算字段r1 ... r6,因此正在考慮將此查詢作爲視圖。下面是我的主要配置文件參數。 Windows 10,PG 9.6,40GB RAM,64位。有什麼想法做什麼?謝謝!PostgreSQL配置文件和查詢設計的計算

編輯:我試着添加LIMIT 500到最後,並且工作,但是如果我對這個查詢運行一個查詢,即在另一個查詢中使用計算的r1,r2,r3 ...,新的查詢會看到所有的記錄還是會限制在500?

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 

我的配置文件參數:

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

也許有關? http://stackoverflow.com/questions/26478031/error-out-of-memory-on-machine-with-32gb-ram-and-without-swap-file – kennytm

+0

是'public.psda'絕對是一個表,或者是它是一種觀點? –

+0

@DavidAldridge它絕對是一張桌子。我轉向另一個項目,但我很快會回到這個項目。 –

回答

1

使用這項服務http://pgtune.leopard.in.ua/

當計算值total RAM for PostgreSQL = total RAM - 基於用於最大性能PostgreSQL的RAM for OS

PGTune計算配置給定硬件配置。

這不是PostgreSQL優化設置的靈丹妙藥。

許多設置不僅取決於硬件配置,而且還對數據庫的大小,客戶端的數量和查詢的複雜性,從而優化配置的數據庫只能給出所有這些參數。