Оптимизация PG на высоких нагрузках

440hz

php.ru
Достался в наследство сервер с PG, который жутко тормозит.

сервер: 8 ядер. 16Г памяти.

собственно проблема в том, что сервак постоянно молотит диск.

с PG дело имел мало. откуда начать? какую статистику посмотреть?

Linux *** 2.6.28-19-server #66-Ubuntu SMP Sat Oct 16 18:11:06 UTC 2010 x86_64 GNU/Linux
PG 8.4

под буфера отдано 3Г

говорят молотит postgres: stats collector process.

как его оптимизировать?

буду рад любой помощи.

планируется переход на новый сервер и PG 9, хочется его настроить по уму.

про разделение дисков, noatime и прочие вкусности в курсе.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
ну и мне что-то крайне сомнительно, что именно процесс "stats collector" может молотить диск. для начала рекомендую перепроверить, что именно его молотит.
Хотя нет, похоже бывает такая проблема (хотя сам никогда не сталкивался): http://archives.postgresql.org/pgsql-general/2010-04/msg00839.php
В первую очередь рекомендуют глянуть, какого размера файл $PGDATA/global/pgstat.stat
 

440hz

php.ru
Sad Spirit

спасибо. сегодня выносим /pgstat.stat на рамдиск. посмотрим упадет ли нагруз. раньше не вынести. боевой сервер. не остановить.

размер файла 14.5М
 

440hz

php.ru
PHP:
----total-cpu-usage---- -dsk/total- ----most-expensive----
usr sys idl wai hiq siq| read  writ|  block i/o process
 15   6  69  10   0   0|1228k 9297k|init        855k   15M
 19  14  44  22   0   1| 386k 8166k|postgres: s   0  5132k
 21  14  50  15   0   0| 593k 4712k|postgres: s   0  7706k
 17  12  61   9   0   1| 133k 4568k|postgres: s   0  2570k
 19  11  64   5   0   0| 123k 3301k|postgres: s   0  5148k
 20  14  58   7   0   1| 165k 6682k|postgres: s   0  7728k
 34  16  43   6   0   1| 213k 1197k|postgres: s   0  7737k
 30  15  41  13   0   1| 110k 8035k|postgres    114k 3573k
 33  14  49   4   0   1| 153k 1198k|postgres: s   0  5170k
 24  12  59   5   0   0| 138k 3576k|postgres: s   0    10M
 

440hz

php.ru
после переноса /pgstat.stats на виртуальный диск нагруз упал в 5-6 раз.
вопрос пока закрыт.
всем спасибо.

PHP:
f# df -h | grep pg_stat_tmp
tmpfs                 100M  144K  100M   1% /var/lib/postgresql/8.4/main/pg_stat_tmp
PHP:
----total-cpu-usage---- -dsk/total- ----most-expensive----
usr sys idl wai hiq siq| read  writ|  block i/o process
 12   5  76   8   0   0|1075k 7099k|init       1057k   13M
 22  12  37  28   0   1| 156k 6932k|postgres     48k  121M
  4   4  41  50   0   1| 140k   13M|postgres      0  2100k
 13   9  27  50   0   1|  96k   16M|postgres: p   0   392k
 10   8  38  43   0   1|  52k   40M|postgres      0  4032k
 10   8  43  39   0   1|  96k   25M|postgres    120k 5980k
  9   6  40  43   0   1|  44k   29M|postgres: p   0   456k
  9  11  40  39   0   1|  92k 5916k|postgres: p   0   432k
 16  11  41  32   0   0|  56k 5552k|postgres     40k 1840k
 16  14  42  27   0   1| 264k 7584k|postgres     48k 1256k
 19  15  45  20   0   0| 396k 5368k|postgres   1300k 2988k
 25  17  54   4   0   0|1096k  488k|postgres   1096k  688k
 17  10  71   2   0   0|  48k  592k|postgres     48k 4532k^C
 

440hz

php.ru
не хватило 100М. Пришлось на лету перемапить.

Код:
#mount -o remount,size=500M /var/lib/postgresql/8.4/main/pg_stat_tmp
так же поправили в /etc/fstab
 
Сверху