2011-08-05 49 views
0

我这台机器上:UBUNTU 11.04 + PHP + PostgreSQL的增强性能

英特尔Core 2 Duo E8400 @ 3GHZ 4GB内存DDR2

PHP 5.3.6 的pgsql 9.1

我m运行一个PHP脚本,需要5分钟的时间在类似规格的mac上。 这个php脚本本质上是重新创建一个将数据导入它的数据库。

在这台电脑上运行超过20分钟。

奇怪的是利用CPU的来自PHP & POSTGRESQL

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的),因为他们需要(内存限制-1)使用尽可能多的RAM和调谐postgres的使用方法:

的shared_buffers = 2GB
effective_cache_size = 3072MB

任何建议让该脚本使用更多的RAM &更多的CPU和跑得更快?

感谢

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

set synchronous_commit to off; 

,因为是不是安全,使此选项默认,我只是其切换到关闭需要的时候.. 了解什么同步提交并documentation

回答

1

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

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

+0

两台计算机都有相同的硬盘(sata 2 7200 rpm)。我猜是一些隐藏的价值是锁定php/postgres使用更多的RAM - CPU。 –

+0

更改为同步提交以关闭解决我的问题。感谢您关于提交的信息。 –