Решили проверить сколько схем сможем создать в одной базе данных. В каждой схеме 80 таблиц, и в одной таблице каждой схемы 50 000 записей.
Сервер на котором стоит Postgres имеет 16 Гб памяти, и на нем стоит CentOS.
Запустили процесс в начале на одном соединении с БД. CentOS где - то на 1000 - й схеме сняла Postgres по причини нехватки памяти. Он действительно с каждой созданной схемой отъедал все больше и больше памяти. Тогда мы стали рвать соединение при создании каждой 15 - й схемы. Создали 20 000 схем диска отъели около 400Гб, решили остановиться. Подсчитать в обозримый срок размеры базы средствами Postgres не смогли, часа два ждали, надоело.
Стали делать запросы ( обычные SELECT к таблицам в различных схемах ) на 50 - ти соединениях не разрывая их, через какое - то Postgres опять система сняла. Стали рвать соединения все стало нормально. Пока такое поведение Postgres пугает, ибо мы не понимаем, что сделать на сервере, чтобы защититься от неконтролируемых снятий Postgres системой.
Надо настроить сервер
Надо настроить сервер грамотно. И на уровне postgresql.conf и на уровне системы: максимума shared памяти и selinux
shared_buffer стоит 5Гб.И
shared_buffer стоит 5Гб.
И вдобавок падает скорость разворота схем с ростом их количества. Сначала схемы разворачиваются за 5 секунд, затем время растет постепенно и уже схемы ближе к 20000 разворачиваются за 30 сек.
А что измениться если selinux поставить, Postgre на нем с памятью по - другому работать будет?
Если у вас CentOS, то Selinux
Если у вас CentOS, то Selinux у вас УЖЕ стоит. Вопрос только в том включен он у вас или нет - по умолчанию он включен. А если включен, то не лучше ли выключить, если уж непонятно как настроить?
А что вас удивляет? Вас не удивляет, что при увеличении уровня крутизны склона по нему тяжелее взбираться?
Идём и читаем
http://postgresql.ru.net/manual/runtime-config-resource.html#RUNTIME-CON...