我在这台机器上:
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
答案 0 :(得分:1)
导入数据需要将其写入磁盘,因此进程的持续时间可能由本地存储系统的性能决定。如果您的Mac有一个华而不实的SSD而另一个盒子是IDE磁盘,后者可能会慢得多。使用iostat可视化两个系统上的磁盘吞吐量。
插入/写入数据的另一个重要性能因素是提交大小,尝试一次插入大量行,然后每隔几千行发出一次提交。或者使用更快的“COPY FROM STDIN”方法(这是Postgresql专有的)。