我一直在阅读一些关于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