Два сервера postgresql с одинаковой конфигурацией, разной производительностью - PullRequest
1 голос
/ 27 сентября 2011

У меня два идентичных сервера, на обоих установлен сервер postgresql версии 9.0.4 с одинаковой конфигурацией.Если я запускаю файл .sql, который выполняет около 5 тыс. Вставок, то для первой это занимает пару секунд, а для второй - 1 минута и 30 секунд.

Если я установил synchronous_commit, скорость резко снижается(как и ожидалось), а производительность двух серверов сопоставима.Но если я установлю значение для параметра synchronous_commit в значение on, на одном сервере время выполнения сценария вставки увеличивается менее чем на одну секунду, а на другом - слишком сильно, как я уже говорил в первом периоде.

Любая идея по этому поводуразница в производительности?Мне не хватает какой-либо конфигурации?

Обновление : пробовал простой тест диска: time sh -c "dd if=/dev/zero of=ddfile bs=8k count=200000 && sync"

быстрый вывод на сервер:

1638400000 bytes (1.6 GB) copied, 1.73537 seconds, 944 MB/s

real    0m32.009s
user    0m0.018s
sys 0m2.298s

медленный сервервывод:

1638400000 bytes (1.6 GB) copied, 4.85727 s, 337 MB/s

real    0m35.045s
user    0m0.019s
sys 0m2.221s

Общие функции (оба сервера):

SATA, RAID1, controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller, distribution: linux centOS. mount -v output:
/dev/md2 on / type ext3 (rw)
proc on /proc type proc (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md1 on /boot type ext3 (rw)

быстрый сервер: ядро ​​2.6.18-238.9.1.el5 # 1 SMP

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            3906     4209029     2102562   fd  Linux raid autodetect
/dev/sda2         4209030     4739174      265072+  fd  Linux raid autodetect
/dev/sda3         4739175  1465144064   730202445   fd  Linux raid autodetect

медленный сервер: ядро ​​2.6.32-71.29.1.el6.x86_64 # 1 SMP

Disk /dev/sda: 750.2 GB, 750156374016 bytes
64 heads, 32 sectors/track, 715404 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006ffc4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     4194303     2096128   fd  Linux raid autodetect
/dev/sda2         4194304     5242879      524288   fd  Linux raid autodetect
/dev/sda3         5242880  1465147391   729952256   fd  Linux raid autodetect

Может быть полезно решить проблему производительности?

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Полагаю, ваш медленный сервер с более новым ядром имеет рабочие барьеры. Это хорошо, так как в противном случае вы можете потерять данные в случае сбоя питания. Но это, конечно, медленнее, чем запуск с включенным кэшем записи и без барьеров, он же работает с ножницами .

Вы можете проверить, включены ли барьеры, используя mount -v - поиск barrier=1 в выходных данных. Вы можете отключить барьеры для вашей файловой системы (mount -o remount,barrier=0 /) для ускорения, но тогда вы рискуете испортить данные.

Попробуйте выполнить вставку по 5 тыс. За одну транзакцию - Postgres не нужно будет записывать на диск в каждой вставленной строке. Теоретический предел для числа транзакций в секунду намотки должен быть сопоставим со скоростью вращения диска (7200 об / мин диска ≈ 7200/60 т / с = 120 т / с), поскольку диск может записывать данные в сектор только один раз за оборот.

1 голос
/ 27 сентября 2011

Для меня это звучит так, как будто на «быстром» сервере есть кэш записи, включенный для жесткого диска (-ов), тогда как на медленном сервере жесткий диск (-ы) действительно записывают данные, когда PG записывает их (вызывая fsync )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...