postgres内存分配调优2

我已经有了一个带有12Gb内存的Ubuntu Linux系统,其中大部分(至less10Gb)可以分配给postgres。 该系统还具有6个磁盘15k SCSI RAID 10设置。

我试图优化的过程是双重的。

首先一个单线程的单连接将会对外部链接的2-4个表进行多次插入。

其次,许多不同的复杂查询针对结果数据运行,广泛地使用组。 这部分特别需要优化。

我有四个这样的进程一次运行,以便利用四核CPU,因此通常不会有超过5个并发连接(1个pipe理任务的备用)。

你会推荐什么configuration改变到默认的Postgresconfiguration?

我正在寻找像work_mem,shared_buffers等的最佳值

相关的doco

谢谢!

我会降低checkpoint_segments,每个将占用16MB,总共1GB(64 * 16MB)。 将1GB写入磁盘可能需要很长时间。 如果您有一个512MB RAM的RAID卡,只需使用50%的WALL段来获得非常好的写入性能:checkpoint_segments 16

还要将checkpoint_timeout降低到2或3分钟,以获得更好和更可预测的性能。

如果你有很多的INSERT,使用准备好的语句,在一个事务中插入大量的INSERT,甚至使用COPY。 COPY将为插入提供最佳性能。 为了获得最佳性能,每笔交易都必须安装在单个缓冲区中。 你select2MB的墙壁缓冲区,testing这个看看是否正常。

以下是我到目前为止所做的:

  • max_connections 100 – > 8
  • checkpoint_segments 3 – > 64
  • checkpoint_completion_target 0.5 – > 0.8
  • work_mem 1MB – > 64MB
  • maintenance_work_mem 16MB – > 256MB
  • log_temp_files -1 – > 0
  • wal_buffers 64kb – > 2MB
  • random_page_cost 4.0 – > 2.0
  • effective_cache_size 128MB> 9216MB
  • shared_buffers 24MB> 4096MB

希望有人可以validation这些是合理的设置或改善这一点。

这个链接也是有用的: Tuning_Your_PostgreSQL_Server