У нас есть база данных Postgres с 100 таблицами 20 из них с более чем 5 000 000 строк, главный сервер БД работает на процессорах Debian 32MB RAM 8.Postgres Тюнинг и масштабирование
Дополнительно к основной БД у нас есть Slave DB, реплицированная с использованием Slony.
В нашем приложении используется Java и Hibernate для SQL-запроса c3p0 в качестве пула соединений.
Наша проблема заключается в том, что в настоящее время мы ожидаем высоких нагрузок во время пикового времени около 30 и около 4 во время низкого трафика. В настоящее время мы не используем балансировку нагрузки между ведущим и ведомым для операторов выбора.
Конфигурация мастер-БД Postgres выглядит следующим образом:
shared_buffers = 6144MB
temp_buffers = 16MB
max_prepared_transactions = 20
work_mem = 128MB
max_fsm_pages = 409800
автовакууминг включен.
c3p0 Hibernate конфигурация пула соединений является:
<property name="c3p0.min_size">3</property>
<property name="c3p0.max_size">200</property>
<property name="c3p0.timeout">300</property>
<property name="c3p0.max_statements">1000</property>
<property name="c3p0.idle_test_period">300</property>
Одна из главных проблем мы сталкиваемся в том, что запрос на выборку являются очень сложными, многие присоединяются и даже профсоюзы.
Что было бы решением для настройки, масштабирования нашей реальной системы и предотвращения высокой нагрузки?
Модернизируйте оборудование? Балансировка нагрузки между мастером и ведомым? Плохая настройка?
Любые предложения по лучшей системе балансировки нагрузки, чем slony?
Оптимизация операторов SQL невозможна, потому что мы не разрабатываем программное обеспечение.
Используя результаты объяснения, вы можете определить новые индексы, которые улучшат производительность операторов sql без их изменения. – crowne