0

我在这台机器上:

英特尔酷睿 2 双核 e8400 @3GHZ 4GB 内存 DDR2

php 5.3.6 pgsql 9.1

我正在运行一个 php 脚本,在具有类似规格的 mac 上需要 5 分钟。这个 php 脚本本质上是重新创建一个数据库,将一些数据导入其中。

在这台计算机上运行超过 20 分钟。

奇怪的是使用 PHP 和 POSTGRESQL 的 CPU

 PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
 8408 postgres  20   0 2188m  44m  40m D    4  1.1   0:20.71 postgres                                                                                                                                          
 8407 gianps    20   0  380m 225m 6620 S    2  5.7   0:11.78 php


top - 16:08:32 up  3:35,  3 users,  load average: 1.26, 1.15, 0.80
Tasks: 187 total,   1 running, 185 sleeping,   0 stopped,   1 zombie
Cpu(s):  4.8%us,  2.7%sy,  0.2%ni, 87.0%id,  5.1%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   4056572k total,  2541972k used,  1514600k free,   117772k buffers
Swap:  3905532k total,        0k used,  3905532k free,   902048k cached

我将 php(cli 和 apache)设置为根据需要使用尽可能多的 ram(内存限制 -1)并调整 postgres 以使用:

shared_buffers = 2GB
有效缓存大小 = 3072MB

有什么建议让这个脚本使用更多的内存和更多的 cpu 并运行得更快吗?

谢谢

更新:经过一番调查,我发现设置同步提交(在这种情况下)使我的脚本快 10 倍。

set synchronous_commit to off;

因为将此选项设置为默认选项是不安全的,所以我只是在需要时将其关闭..以了解同步提交文档的作用

4

1 回答 1

1

导入数据需要将其写入磁盘,因此该过程的持续时间可能由本地存储系统的性能决定。如果你的 Mac 有一个华丽的 SSD,而另一个盒子有一个 IDE 磁盘,那么后者可能会慢很多。使用 iostat 可视化两个系统上的磁盘吞吐量。

插入/写入数据的另一个重要性能因素是提交大小,尝试一次插入很多行,然后每隔几千行发出一次提交。或者使用更快的“从标准输入复制”方法(这是 Postgresql 专有的)。

于 2011-08-05T23:22:00.423 回答