我一直在閱讀一些關於postgres內存分配配置的文檔,但需要一些幫助。postgres內存分配調整
我的進程運行數千個SELECT SUM(x) FROM tbl WHERE ???
類型查詢,其中一些需要10-30秒才能運行。在某些情況下,這些查詢的總和是多天。
除此之外,我有一個填充從原料表彙總表的形式幾條語句:INSERT INTO sum_tbl SELECT FROM raw_tbl WHERE ??? GROUP BY ???
因爲原始表都相當大(高達4000萬行),這些彙總查詢可能需要幾個小時才能跑。
該進程是單線程的,因此一次只能運行一個查詢,但是我一次運行多達4個進程,這意味着只有1-4個併發連接。
該電腦有3.2 GB RAM,其中大部分是免費的。
考慮到這一切,哪些內存設置最適用?
我的理解是work_mem
看起來最相關。
謝謝。
編輯 - 添加哪些相似的查詢,查詢運行的分析1053000次
"Nested Loop (cost=0.00..62869.18 rows=6 width=17) (actual time=1812.655..32761.845 rows=30 loops=1)"
" -> Seq Scan on table2 tt (cost=0.00..1103.74 rows=2212 width=5) (actual time=0.017..29.231 rows=1527 loops=1)"
" Filter: (pp AND (dd = 1200::numeric) AND ((type)::text = 'setup'::text))"
" -> Index Scan using idx_table1 on table1 t (cost=0.00..27.91 rows=1 width=20) (actual time=21.432..21.432 rows=0 loops=1527)"
" Index Cond: ((t.t_id = tt.id) AND (t.st = 520000::numeric) AND (t.ta = 2300000::numeric))"
" Filter: (date_trunc('month'::text, t.start) = '2004-03-01 00:00:00'::timestamp without time zone)"
"Total runtime: 32761.983 ms"
只是要非常清楚 - work_mem是*不是*每個連接,它是每個*操作*。所以每個連接可能會有超過1 x work_mem。 – 2009-12-14 14:18:05
1.碰到work_mem高達10Mb,2.我認爲我有,3.上面添加的問題,4.我們正在努力獲得新硬件的訪問權限,但目前在單個SATA磁盤上,5. thx,6。跆拳道?很確定我沒有替代品。 – pstanton 2009-12-14 19:53:04
增加work_mem是否有可能減慢處理速度,即使它沒有達到交換點?我只使用我的記憶的第三,但如果有什麼我注意到放緩! – pstanton 2009-12-17 09:40:50