Windows上的PostgreSQL shared_buffers

时间:2015-01-04 08:35:59

标签: performance postgresql

我在Windows Server上运行64位PostgreSQL 9.1。我正在努力改善其性能,特别是在处理繁重的写作方面。我曾经将shared_buffer增加到RAM的%25,而scine我得到32GB RAM我决定将 shared_buffers 设置为 8GB 。在我搜索更多信息时,我发现了这篇文章:http://rhaas.blogspot.com/2012/03/tuning-sharedbuffers-and-walbuffers.html

它说:but not more than about 8GB on Linux or 512MB on Windows, and sometimes less.

现在我很困惑。如果它无法帮助提高PostgreSQL的性能,那么增加RAM有什么意义?!

其他值如下:

work_mem: 160MB
maintenance_work_mem = 1920MB
checkpoint_segments = 100
checkpoint_completion_target = 0.9
checkpoint_timeout = 1h
wal_buffers = 64MB
effective_cache_size = 22GB

1 个答案:

答案 0 :(得分:0)

对于写得很重的Windows服务器,最重要的设置是调整checkpoint_segments。您的值已经相当高,但您可能希望尝试最多256个值。

从postgresql性能调优指南(找到here):

  

PostgreSQL在名为WAL段的文件中将新事务写入数据库,文件大小为16MB。每次写入checkpoint_segments值这些文件时,默认情况下为3,都会出现一个检查点。检查点可能是资源密集型的,在现代系统中,每48MB执行一次将是一个严重的性能瓶颈。将checkpoint_segments设置为更大的值可以改善这一点。除非您在非常小的配置上运行,否则您几乎肯定会将此设置为至少10,这也可以有效地增加完成目标。

     

对于更多写入较多的系统,从32(每512MB的检查点)到256(每4GB)的值现在很流行。非常大的设置会占用更多磁盘,并且会导致数据库需要更长时间才能恢复,因此请确保在大量增加之前对这些内容感到满意。通常,大设置(> 64 / 1GB)仅用于批量加载。请注意,无论您为细分市场选择什么,除非您还增加checkpoint_timeout(大多数系统都不需要),否则您至少每5分钟仍会获得一个检查点。