2010-03-16 42 views
2

我有一个Postgres实例构建一个GIN索引。它看着约20万行,到目前为止大约需要9个小时。谁知道最终需要多久?问题在于,当我希望使用更多的90%时,它使用了大约2%的CPU。有什么办法可以强制它加速吗?Postgres在索引编译期间没有使用足够的CPU!

+0

你确定性能是受CPU限制的吗? – jball 2010-03-16 21:09:42

+0

不,我不确定。我只是对它没有使用的CPU数量感到惊讶。整个表的转储达到130 MB。它使用了2.6%的CPU和2.7%的RAM,每个备件都足够了。 – Joe 2010-03-16 21:13:15

+1

您是否为maintenance_work_mem设置了适当数量的RAM?编辑:没有锁阻止索引的制作? – 2010-03-16 21:16:43

回答

2

主要的瓶颈可能是磁盘IO而不是CPU。

如果你在Windows机器上,你可以使用Process Explorer(免费软件)来检查磁盘IO,如果在Unix上,使用iostat,sar,DTrace(在一段时间内没有完成后者,所以不能100%确定最好的工具)

+0

Windows上的资源监视器也显示了这一点,您通常可以很容易地看到机器当前是否受CPU限制或通过IO。 – Joey 2010-03-16 21:14:47

+0

谢谢!我在unix(Linux和Mac)上。我会看看选项。 – Joe 2010-03-16 21:51:02

+1

我认为这是由于寻呼,导致颠簸。答案是通过'set maintenance_work_mem = 102400;'增加工作内存。 – Joe 2010-03-24 11:33:57