在Windows桌面上调整postgreSQL以利用24GB RAM
我不熟悉调整postgreSQL,但已经阅读了本标准指南: 并使用pgtune获得了一些配置建议。我在Windows 8上运行postgreSQL 9.3,正在进行数据分析,我的桌面上有24GB RAM、一个i7 4核处理器和一个7200rpm硬盘,带有使用intel smart response的32GB SSD缓存 似乎postgreSQL没有充分利用计算机,我想知道在调优方面还需要做些什么 pgtune对postgresql.conf进行了以下更改:在Windows桌面上调整postgreSQL以利用24GB RAM,windows,performance,postgresql,ram,Windows,Performance,Postgresql,Ram,我不熟悉调整postgreSQL,但已经阅读了本标准指南: 并使用pgtune获得了一些配置建议。我在Windows 8上运行postgreSQL 9.3,正在进行数据分析,我的桌面上有24GB RAM、一个i7 4核处理器和一个7200rpm硬盘,带有使用intel smart response的32GB SSD缓存 似乎postgreSQL没有充分利用计算机,我想知道在调优方面还需要做些什么 pgtune对postgresql.conf进行了以下更改: 默认\u统计\u目标=100 维护工
- 默认\u统计\u目标=100
- 维护工作内存=480MB
- 约束\排除=开启
- 检查点\完成\目标=0.9
- 有效缓存大小=2816MB
- 工作内存=96MB
- wal_缓冲区=32MB
- 检查点_段=64
- 共享缓冲区=960MB
- 最大连接数=20
SELECT t1.m_id, t2.m_id, count(*)
FROM training t1, training t2
WHERE t1.u_id = t2.u_id AND t1.m_id < t2.m_id
GROUP BY t1.m_id, t2.m_id
它已经运行了8个小时,但让我感兴趣的是TaskManager透露的内容。PostgreSQL Server进程仅使用:
- 15%CPU
- 6.1%内存(约512MB)
- 3.5%磁盘
work\u mem
允许数据库服务器在足够大的RAM中进行排序。问题:我的作品够大吗?如何判断排序是在RAM中还是在磁盘上进行如果您能提供任何有助于加快查询速度的见解,我将不胜感激。谢谢 我认为有效的缓存大小听起来很小,试试20GB吧。此外,对于分析工作负载,work_mem相当小。如果您确定不会有太多连接,我会将其设置为1GB(进一步降低max_连接将保护您避免意外运行太多连接) 单个7200rpm硬盘似乎不足以满足分析工作负载。我不熟悉“使用intel smart response的SSD缓存”,也许这有助于弥补它。你能告诉我们有多少5GB的表被缓存在上面吗 您可能还希望提高有效io并发性,不知道SSD缓存的性能如何,我不知道这会有多好。但这可能会有帮助,也可能不会有什么伤害 内存使用率低是正常的。Windows应该使用内存来缓存文件数据,这对postgres应该有很大的帮助,但不会对postgres收费 我不知道在任务管理器中哪里可以找到“3.5%磁盘”,我找不到这样的指标
PostgreSQL 9.3不会将单个查询并行化到多个CPU(并行查询是在9.6版中添加的),因此15%的CPU使用率离完全限制CPU并不远。“Windows共享_缓冲区不应大于512MB”-我认为这仅适用于32位系统。使用2GB或4GB这样的设备并不是那么不合理,甚至可能更不合理。对于24GB系统,您的
有效缓存大小似乎很低。实际上,Windows很可能会使用更多的文件缓存。您可以检查这一点,例如使用ProcessExplorer。如果您有一个快速磁盘,您可以尝试将random\u page\u成本降低到2.5。而且work\u mem
似乎非常高。请记住,此内存可以为每个会话分配多次@一匹没有名字的马谢谢。我还应该提到,由于它被用于数据分析,我实际上一次只运行一个查询。RussellTaylor Haha,一个seqscan上的数百万次迭代嵌套循环,即使仍然工作,内存似乎也很高?它不会在7200rpm硬盘上完成本世纪。在这个查询中尽可能多地抛出work\u mem
,而不必从操作系统的缓冲区缓存中刷新太多内容。并升级您的硬盘;-)@CraigRinger在30小时内就完成了信不信由你。我会考虑升级到SSD,我肯定会增加WorkMeMm,谢谢。增加WorkMeMe的工作了吗?<代码>有效的IOIORY并发< <代码>目前只用于位图索引扫描,所以它无论如何都不会起作用。我原以为它是使用位图扫描的,但我一定是把这个问题和我昨天想的另一个问题搞混了。在任何情况下,如果它真的每个循环返回191行,并且有效io并发度大于1,那么它可能应该使用一个,但是规划者还没有聪明到可以这样做。@jjanes谢谢你的回答。对于3.5%磁盘,我的任务管理器在进程选项卡中有以下列:CPU、内存、磁盘、网络。关于共享缓冲区,以及超过512MB在Windows中是否仍然无效,你知道吗?@jjanes只是一个简单的提示,有效io\U并发性在Windows系统上是不可设置的,不管它是32位还是64位。这适用于版本10之前的Windows和版本10之前的PostgreSQL。这与没有posix_fadvise
功能有关,但这超出了我的工资等级,因此我无法推断。
GroupAggregate (cost=4984590388.65..5216672318.82 rows=25381444 width=8)
-> Sort (cost=4984590388.65..5042547417.59 rows=23182811573 width=8)
Sort Key: t1.m_id, t2.m_id
-> Nested Loop (cost=0.57..676446040.92 rows=23182811573 width=8)
-> Seq Scan on training t1 (cost=0.00..1621754.12 rows=99072112 width=8)
-> Index Only Scan using training_u_id_m_id_idx on training t2 (cos=0.57..4.90 rows=191 width=8)
Index Cond: ((u_id = t1.u_id) AND (m_id > t1.m_id))