PostgreSQL 最大化性能 SSD

Ale*_*ros 21 postgresql postgresql-9.3

我将拥有一个巨大的 PostgreSQL 9.3 数据库,其中包含许多表,每个表有超过 1 亿个条目。该数据库将基本上是只读的(一旦我填写了所有必要的表并构建了索引,不再对 DB 进行写操作)和单用户访问(从 localhost 运行和基准测试多个查询),因为将使用 DB仅用于研究目的。查询将始终在整数 DB 字段上使用 JOIN。

为此,我可能会购买 SSD (256-512GB)。我以前没有用过 SSD 做数据库,所以有什么我应该害怕的吗?我可以将整个数据库放在 SSD 上,还是只放在索引上?为 SSD 调整 PostgreSQL 是否需要任何特别的建议/教程?请注意,我有一个配备 i7 和 32Gb 内存的不错的工作站,所以也许您也可以提供一些建议。

小智 22

关于 SSD,主要建议是将 postgresql.conf 中的 'random_page_cost' 降低到 1(等于 'seq_page_cost'),以及其他常用设置。


Cra*_*ger 16

所以有什么我应该害怕的吗?

没有备份。像任何存储设备一样,它可能会死。保留备份。

如果数据加载需要很长时间,我会在完成数据加载后通过停止并复制它来备份只读数据库。这样,如果出现问题,以后重新创建会更容易。

我可以将整个数据库放在 SSD 上,还是只放在索引上?

如果合适,则存储整个数据库。

如果没有,请在 SSD 上放置一个表空间并使用它来存储索引和尽可能多的查询量大的表。

为 SSD 调整 PostgreSQL 是否需要任何特别的建议/教程?

SSD 的大部分优势都适用于 OLTP 写入负载。只读加载的主要优点是快速查找,slardiere 已经涵盖了这一点。

您可能想要设置effective_io_concurrency = 5或其他内容来反映 SSD 可以执行快速、大量流水线随机读取的事实……但它只影响位图索引扫描,并且在实践中random_page_cost已经包含了这一点。

对于只读加载,它没有太大区别。

对于初始数据加载,请参阅:

请注意,我有一个配备 i7 和 32Gb 内存的不错的工作站,所以也许您也可以提供一些建议。

maintenance_work_mem为数据负载设置一个 big 。我至少会使用8GB.

work_mem为查询工作设置一个大的。适当的大小取决于查询的复杂性。500MB从那里开始并从那里上升。

checkpoint_segments为初始数据加载增加(大量)。

请记住禁用 VM 过量使用!(参见 PostgreSQL 手册:http : //www.postgresql.org/docs/current/static/kernel-resources.html