UBUNTU 11.04 + PHP + POSTGRESQL增强性能

时间:2011-08-05 14:23:45

标签: php linux postgresql ubuntu ubuntu-11.04

我在这台机器上:

intel core 2 duo e8400 @ 3GHZ 4GB ram ddr2

php 5.3.6 pgsql 9.1

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

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

奇怪的是使用PHP和PHP的CPU。 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)以使用尽可能多的ram(内存限制-1)并调整postgres使用:

shared_buffers = 2GB
effective_cache_size = 3072MB

任何建议让这个脚本使用更多的ram&更多的CPU和更快的运行?

感谢

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

set synchronous_commit to off;

因为将此选项设为默认值是不安全的,我只需在需要时将其切换为关闭状态。 了解同步提交的作用documentation

1 个答案:

答案 0 :(得分:1)

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

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