推荐的 Postgres 设置来加速 100GB 数据库的索引?

Ric*_*ard 2 postgresql index postgresql-9.1

我刚刚在具有 32GB RAM 和 320GB 固态磁盘的服务器上安装了 Postgres 9.1。

我将使用这台服务器来为我的站点和我的数据库提供服务(即它不仅仅是一个数据库服务器)。数据库是 500m 行,大约 120GB 的数据。

加载数据后,需要针对 SELECT 查询优化数据库 - 数据本质上是相当静态的,并且每三个月仅更改一次。对数据库进行的 99% 的查询都是读取。

我想知道什么是好的 Postgres 设置开始。我已经设置:

effective_cache_size 8GB
shared_buffers 4GB
Run Code Online (Sandbox Code Playgroud)

在 Postgres 配置文件中,但我没有触及任何其他默认值。

使用上面的设置,我发现在我的表中的一个字段上创建索引非常慢(一个多小时并且仍在运行),我想创建其中的许多。

是否还有其他设置可以让我更快地创建索引?或者我可以安全地增加这些设置吗?

jja*_*nes 5

如果我要设置新服务器,我不会使用 9.3.6 以下的任何内容。自 9.1 以来有许多改进。

如果您使用 9.4.1,有一些代码可以让它使用比以前更多的 RAM 来创建索引。

您列出的两个参数对于创建索引都不是特别重要。为此目的最关键的是maintenance_work_mem. 在 32GB 的服务器上,如果我一次只构建一个索引并密切关注事物,我会将它设置为 16GB,用于构建大型索引的本地会话。

此外,C如果您有选择,排序规则比其他排序规则快得多。

瓶颈是CPU还是IO?

  • `utf-8` 不是排序规则,它是一种编码(即告诉字符如何转换为字节和相互转换的规则),并且它与 `C` 语言环境并不相互排斥。`C.UTF-8` 作为数据库的 `lc_collat​​e` 和 `lc_ctype` 是可以接受的,甚至很可能是您的最佳选择。 (2认同)