UBUNTU 11.04 + PHP + POSTGRESQL Повышение производительности - PullRequest
0 голосов
/ 05 августа 2011

Я на этой машине:

Intel Core 2 Duo E8400 @ 3GHZ 4 ГБ оперативной памяти ddr2

PHP 5.3.6 pgsql 9,1

Я бегу PHPскрипт, который занимает около 5 минут на Mac с аналогичными характеристиками.Этот скрипт php, по сути, воссоздает базу данных, импортируя в нее некоторые данные.

На этом компьютере он работает более 20 минут.

Странная вещь заключается в использовании ЦП из обоих 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), и настроил postgres:

shared_buffers = 2GB
ffective_cache_size = 3072MB

Любое предложение, чтобы этот скрипт использовал больше оперативной памяти и больше процессора и работал быстрее?

спасибо

обновление: после некоторого расследования я обнаружил, что этоустановка синхронной фиксации (в этой ситуации) делает мой сценарий в 10 раз быстрее.

set synchronous_commit to off;

, поскольку небезопасно использовать эту опцию по умолчанию, я просто отключаю ее при необходимости ... чтобы понять, что делает синхронная фиксация документация

1 Ответ

1 голос
/ 06 августа 2011

Импорт данных требует записи их на диск, поэтому продолжительность процесса, скорее всего, определяется производительностью локальной системы хранения. Если на вашем Mac установлен флэш-накопитель SSD, а в другом - диск IDE, последний может оказаться намного медленнее. Используйте iostat для визуализации пропускной способности диска в обеих системах.

Другим важным фактором производительности для вставки / записи данных является размер коммита, попробуйте вставить сразу несколько строк, а затем выдавать коммит только каждые несколько тысяч строк. Или используйте еще более быстрый метод «COPY FROM STDIN» (он является собственностью Postgresql).

...