Мигрировался с MS SQL на PostgreSQL сегодня.
Платформа Windows Server 2008 R2.
Нагрузка на процессор возросла с 20% до 40%.
Настройки взял с http://pgtune.leopard.in.ua/ для веб-приложения, виндоуз, 3 ГБ и 50 подключений
max_connections = 50
shared_buffers = 512MB
effective_cache_size = 2304MB
work_mem = 17476kB
maintenance_work_mem = 192MB
checkpoint_segments = 32
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
Однако, все его ~40 процессов postgres.exe едят в совокупности еле-еле 500МБ, возможно, поэтому и едят чудовищно процессор.
Необходимо снизить нагрузку на сервер. Как?
А запросы сами не смотрели?
А запросы сами не смотрели? Индексы созданы как положено?
Кстати (чисто моё мнение), но Винда не лучшая платформа для PostgreSQL.
Чисто и моё мнение, что винда
Чисто и моё мнение, что винда не торт, но выбора не было.
Т.к. к миграции готовились и она прошла с перекидыванием всего-всего в т.ч. и индексов, и основной функционал, который занимает 80% всех запросов является довольно* сбалансированным и быстрым, то грешить на это мало оснований.
*даже на бездействующую систему запросы обрабатываются дольше, конечно, винда же.
Далее. Ошибся, нагрузка на процессор занимает теперь 50% 0_о. Т.е. она выросла в 2,5 раза. MS SQL занимал 5 ГБ, PG занимает сейчас 500MB оперативки и, видимо, решает свои проблемы путём постоянных перерасчётов того и сего. Как так может быть?
А ещё нами была поставлена pg_stat_statements, через которую нельзя найти какие-то слишком уж страшные и тормозящие запросы, всё в рамках приличия. Или вы думаете, что по-капельке каждый запрос таки имеет большее значение, чем имел в связке с MS SQL?
я бы первым делом прогнал
я бы первым делом прогнал VACUUM FULL всё-таки на базу, чтобы индексы перестроились.
Если не поможет, вдумчиво почитайте
http://postgresql.ru.net/pgtune/postgresql.html
Что касается сравнения MySQL и PostgreSQL надо помнить одну вещь. MySQL - это сервер работающий с нитями (тредами), а PostgreSQL работает с процессами, т.е. каждое соединение - это отдельный процесс.
Не MySQL, а MS SQL. Раз PG на
Не MySQL, а MS SQL.
Раз PG на каждое соединение отдельный процесс запускает, а у меня работает связка с PGBouncer, при этом процессы занимают не более 20МБ в памяти, тогда понятно, почему на довольно однотипные запросы они выедают мне процессор. MS SQL хранил всё в одном процессе и весил он 5ГБ и работал хорошо.
Видимо, необходимо будет как-то выкручиваться с разными "слоями" типа кэша.