PostgreSQL最大化性能SSD


19

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

我可能会为此目的购买SSD(256-512GB)。我以前没有为数据库使用SSD,所以我应该担心什么?我可以将整个数据库放到SSD上还是将索引放到硬盘上?调整PostgreSQL的SSD是否需要任何特别的建议/教程?请注意,我有一个不错的工作站,配备了i7和32Gb RAM,因此也许您也可以在那里提供一些建议。

Answers:


16

那我有什么好怕的?

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

如果数据加载需要花费大量时间,则在完成数据加载后,我将备份只读数据库,方法是停止并复制它。这样,如果出现问题,以后再创建起来会更容易。

我可以将整个数据库放到SSD上还是将索引放到硬盘上?

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

如果没有,请在SSD上放置一个表空间,并使用它存储索引以及适合的大量查询表。

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

SSD的大多数优点是用于OLTP写负载。只读加载的主要优点是快速查找,而slardiere对此进行了介绍。

您可能需要设置effective_io_concurrency = 5或某种方式来反映SSD可以进行快速,大量流水线式的随机读取的事实...但它仅影响位图索引扫描,实际上random_page_cost已经包含了这一点。

对于只读负载,它并没有多大区别。

有关初始数据加载,请参见:

请注意,我有一个不错的工作站,配备了i7和32Gb RAM,因此也许您也可以在那里提供一些建议。

设置较大maintenance_work_mem的数据负载。我至少会用8GB

work_mem为查询工作设置一个大的。适当的大小取决于查询的复杂程度。500MB从那里开始,然后从那里开始。

使您的checkpoint_segments(大量)启动初始数据加载。

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


22

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


按照postgresql.org/docs/11/…,也许这两个值都应小于1.0 :“您可以一起提高或降低这两个值,以改变磁盘I / O成本相对于CPU成本的重要性,这由CPU来描述。以下参数”。
Kirill Bulygin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.