我想调整postgres配置,以便在Windows服务器上使用。这是我目前的posgresql.conf文件:http://pastebin.com/KpSi2zSd
我想增加work_mem
和maintenance_work_mem
,但如果我将值提高到1GB以上,则在启动服务时会出现此错误:
没有任何内容添加到日志文件中(至少不在data \ pg_log中)。如何找出导致问题的原因(增加日志记录)?这与windows和postgres之间的问题管理有什么关系吗?
以下是我的服务器规格:
答案 0 :(得分:1)
在Windows下,work_mem
的值限制为2GB(即使在64位系统上) - 据我所知,没有解决方法。
我不知道为什么你不能把它设置为1GB。也许work_mem
和maintenance_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正在使用的内容,因此实际缓存了多少内容。