2017-02-27 84 views
2

我正在一个速度较慢的旧计算机上运行postgres服务器,该计算机具有一个快速SSD磁盘,2,4 GHz i5处理器和8 GB的RAM。电脑不是速度怪物,但我对这个表现感到惊讶。在具有40,000,000行的表中创建索引需要大约半个小时。我的设置如下:Postgres:CPU绑定创建索引

max_connections = 2 
shared_buffers = 2GB 
effective_cache_size = 6GB 
work_mem = 1GB 
maintenance_work_mem = 512MB 
min_wal_size = 1GB 
max_wal_size = 2GB 
checkpoint_completion_target = 0.7 
wal_buffers = 16MB 
default_statistics_target = 100 

当我看着top输出它看起来像我的CPU绑定的(100%CPU),尽管数据库所使用的内存大约为500 MB,我希望它使用更多。

我将在首次数据导入期间为每个表只创建一次索引。有没有我可以调整的设置来加速此操作?

+0

如果你是CPU绑定...你可以调整的不多。 – joanolo

+1

是一个计算成本很高的索引?这将解释它。也许你可以显示CREATE INDEX语句。如果增加'maintenance_work_mem',它会变得更快吗? –

+0

我会用'maintenance_work_mem'来检查。创建很简单,'CREATE INDEX index_name on name(varcharField);' – wczekalski

回答

1

在将maintenance_work_mem增加到1GB并使用C区域设置初始化数据库群集(而不是我的系统上的一个默认值)后,只花了2分钟。