Мигрировался с MS SQL на PostgreSQL сегодня. Необходимо снизить нагрузку.

Мигрировался с 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ГБ и работал хорошо.

Видимо, необходимо будет как-то выкручиваться с разными "слоями" типа кэша.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023