Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows桌面上调整postgreSQL以利用24GB RAM_Windows_Performance_Postgresql_Ram - Fatal编程技术网

在Windows桌面上调整postgreSQL以利用24GB RAM

在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 维护工

我不熟悉调整postgreSQL,但已经阅读了本标准指南: 并使用pgtune获得了一些配置建议。我在Windows 8上运行postgreSQL 9.3,正在进行数据分析,我的桌面上有24GB RAM、一个i7 4核处理器和一个7200rpm硬盘,带有使用intel smart response的32GB SSD缓存

似乎postgreSQL没有充分利用计算机,我想知道在调优方面还需要做些什么

pgtune对postgresql.conf进行了以下更改:

  • 默认\u统计\u目标=100
  • 维护工作内存=480MB
  • 约束\排除=开启
  • 检查点\完成\目标=0.9
  • 有效缓存大小=2816MB
  • 工作内存=96MB
  • wal_缓冲区=32MB
  • 检查点_段=64
  • 共享缓冲区=960MB
  • 最大连接数=20
现在,我在5GB表“training”上运行这个复杂的自连接,使用group by查询进行计数,该表有1亿行和四个整数列:

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%磁盘
没有其他流程占用大量资源。考虑到查询的复杂性,postgreSQL不会使用更多的可用资源,这让我感到惊讶,有人知道会发生什么吗?我的pgtune值看起来好吗

我也做了一些研究,研究结果告诉我:

  • 在Windows上,共享_缓冲区不应大于512MB,而应使用该系统缓存。问题:我是否必须以某种方式告诉Windows将系统缓存分配给postgreSQL,或者如果postgreSQL请求,这种情况会自动发生
  • 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))