postgres 内存分配调优 2

postgres 内存分配调优 2

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

我尝试优化的过程有两个方面。

首先,单线程、单连接将对通过外键链接的 2-4 个表进行多次插入。

其次,对结果数据运行许多不同的复杂查询,大量使用group by。这部分尤其需要优化。

为了利用四核 CPU,我同时运行四个这样的进程,因此通常不会有超过 5 个并发连接(1 个备用用于管理任务)。

您建议对默认 Postgres 配置进行哪些配置更改?

我正在寻找诸如 work_mem、shared_buffers 等的最佳值。

相关文件

谢谢!

答案1

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

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

如果您有大量 INSERT,请使用准备好的语句,将大量 INSERT 放在单个事务中,甚至使用 COPY。COPY 将为插入提供最佳性能。每个事务都必须适合单个壁缓冲区才能获得最佳性能。您选择 2MB 作为壁缓冲区,测试一下是否合适。

答案2

以下是我目前想到的:

  • 最大连接数100->8
  • 检查点段3 -> 64
  • 检查点完成目标0.5->0.8
  • 工作内存1MB->64MB
  • 维护工作内存16MB->256MB
  • log_temp_files-1 -> 0
  • wal_buffers64kb->2MB
  • random_page_cost4.0 -> 2.0
  • 有效缓存大小128MB > 9216MB
  • 共享缓冲区24MB > 4096MB

希望有人可以验证这些是合理的设置或对此进行改进。

答案3

这个链接也可能有用: 调整你的 PostgreSQL 服务器

相关内容