在Windows Server上使用PostgreSQL 9.3无法将work_mem增加到1GB以上

时间:2015-11-30 09:34:04

标签: windows postgresql memory database-performance

我想调整postgres配置,以便在Windows服务器上使用。这是我目前的posgresql.conf文件:http://pastebin.com/KpSi2zSd

我想增加work_memmaintenance_work_mem,但如果我将值提高到1GB以上,则在启动服务时会出现此错误:

enter image description here

没有任何内容添加到日志文件中(至少不在data \ pg_log中)。如何找出导致问题的原因(增加日志记录)?这与windows和postgres之间的问题管理有什么关系吗?

以下是我的服务器规格:

  • Windows Server 2012 R2数据中心(64位)
  • Intel CPU E5-2670 v2 @ 2.50 GHz
  • 512 GB RAM
  • PostgreSQL 9.3

2 个答案:

答案 0 :(得分:1)

在Windows下,work_mem的值限制为2GB(即使在64位系统上) - 据我所知,没有解决方法。

我不知道为什么你不能把它设置为1GB。也许work_memmaintenance_work_mem的总和还有另一个我不知道的限制。

默认设置work_mem 通常不是一个好主意。使用512GB RAM和10个用户时,可能工作,但请记住,单个查询中的每个排序,组或散列操作的语句都会请求work_mem的数量。因此,您可以声明请求此内存量15或20次。

您无需在postgresql.conf中更改此内容 - 如果您知道以下查询将从大型work_mem中受益,则可以动态更改此项:运行:

set session work_mem='2097151';

如果您使用更高的数字,您将收到一条错误消息,告诉您限制:

  

错误:2097152超出参数“work_mem”的有效范围(64 .. 2097151)

即使Postgres没有使用所有内存,它仍然可以从中受益。 Postgres(与Oracle不同)在很大程度上依赖于文件系统缓存而不是自己进行所有缓存。 shared_buffers超过大约8GB的值很少显示出任何好处。

做什么需要告诉Postgres通过将effective_cache_size设置为适当的值,操作系统通常用于缓存的内存量。 Postgres不会使用进行缓存,但它会影响规划人员选择如果索引可能位于文件系统缓存中,则首选索引扫描。

您可以在Windows任务管理器(或例如ProcessExplorer)中查看文件系统缓存的当前大小

答案 1 :(得分:1)

如上所述,在Windows中依赖OS缓存更为有利。 如果您使用来自sysinternals(Microsoft)的RAMMAP,您可以准确地看到操作系统缓存中postgres正在使用的内容,因此实际缓存了多少内容。