我有一个 12Gb 内存的 Ubuntu Linux 系统,其中大部分(至少 10Gb)可以单独分配给 postgres。该系统还有一个 6 磁盘 15k SCSI RAID 10 设置。
我试图优化的过程是双重的。
首先,单线程、单连接将对通过外键链接的 2-4 个表进行多次插入。
其次,针对结果数据运行许多不同的复杂查询,广泛使用 group by。这部分尤其需要优化。
为了利用四核 CPU,我同时运行了四个这样的进程,因此通常不会有超过 5 个并发连接(1 个备用用于管理任务)。
您建议对默认 Postgres 配置进行哪些配置更改?
我正在寻找诸如 work_mem、shared_buffers 等的最佳值。
谢谢!
我会降低 checkpoint_segments,每个将占用 16MB,总共 1GB (64 * 16MB)。将 1GB 写入磁盘,可能需要很长时间。如果您有一个 512MB RAM 的 RAID 卡,只需将 50% 用于您的 WALL-segments 以获得非常好的写入性能: checkpoint_segments 16
还将 checkpoint_timeout 降低到 2 或 3 分钟,以获得更好和更可预测的性能。
如果您有很多 INSERT,请使用准备好的语句,将大量 INSERT 放入单个事务中,甚至使用 COPY。COPY 将为插入提供最佳性能。每个事务都必须适合单个墙缓冲区以获得最佳性能。您选择 2MB 作为墙缓冲区,测试它是否可以。
到目前为止,这是我想出的:
希望有人可以验证这些设置是否合理或对此进行改进。
这个链接也很有用: Tuning_Your_PostgreSQL_Server