Подтвердить что ты не робот

Настройка производительности PostgreSQL

Имейте в виду, что я новичок в мире sql/баз данных.

Я вставляю/обновляю тысячи объектов каждую секунду. Эти объекты активно запрашиваются через несколько секунд.

Какие основные вещи я должен сделать для настройки производительности моей (postgres) базы данных?

4b9b3361

Ответ 1

Это широкая тема, так что здесь много материала для чтения.

  • EXPLAIN и EXPLAIN ANALYZE чрезвычайно полезны для понимания того, что происходит в вашем db-engine
  • Убедитесь, что соответствующие столбцы проиндексированы
  • Удостоверьтесь, что неулокальные столбцы не проиндексированы (вставка/обновление-производительность может снизиться, если слишком много индексов необходимо обновить).
  • Убедитесь, что ваш postgres.conf настроен правильно
  • Знайте, что такое work_mem и как оно влияет на ваши запросы (в основном полезно для более крупных запросов).
  • Убедитесь, что ваша база данных правильно нормализована.
  • VACUUM для очистки старых данных
  • ANALYZE для обновления статистики (статистика для количества статистики)
  • Постоянные соединения (вы можете использовать диспетчер соединений, например pgpool или pgbouncer).
  • Понять, как построены запросы (объединения, подвыборки, курсоры)
  • Кэширование данных (т.е. memcached) является опцией

И когда вы исчерпали эти параметры: добавьте больше памяти, более быструю дисковую подсистему и т.д. Аппаратное обеспечение имеет значение, особенно в больших наборах данных.

И, конечно же, прочитайте все остальные потоки в postgres/databases.:)

Ответ 2

Прежде всего, прочтите официальное руководство Рекомендации по производительности.

Запуск EXPLAIN во всех ваших запросах и понимание его вывода позволит вам узнать, как ваши запросы будут такими быстрыми, как они могут быть, и если вы должны добавлять индексы.

Как только вы это сделаете, я предлагаю прочитать раздел

Ответ 3

На самом деле есть несколько простых правил, которые позволят вам в большинстве случаев обеспечить производительность:

  • Индексы являются первой частью. Первичные ключи автоматически индексируются. Я рекомендую поместить индексы на все внешние ключи. Затем добавьте индексы ко всем столбцам, которые часто запрашиваются, если в таблице, где запрашивается более одного столбца, есть сильно используемые запросы, поместите индекс в эти столбцы вместе.

  • Настройки памяти в вашей установке postgresql. Установите следующие параметры выше:

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers

Если это выделенный сервер баз данных, вы можете легко установить первые три из них на половину бара (просто будьте осторожны в Linux с общими буферами, возможно, вам нужно отрегулировать параметр shmmax), в любых других случаях это зависит от сколько бара вы хотели бы дать postgresql.

http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html

Ответ 5

Абсолютным минимумом, который я рекомендую, является команда EXPLAIN ANALYZE. Он покажет разбивку подзапросов, объединений и т.д., Все время показывая фактическое количество времени, затраченного на операцию. Он также предупредит вас о последовательном сканировании и других неприятных неприятностях.

Это начало best.

Ответ 6

Поместите fsync = off в свой posgresql.conf, если вы доверяете своей файловой системе, иначе каждая операция postgresql будет немедленно записана на диск (с системным вызовом fsync). У нас эта опция отключена на многих производственных серверах с 10 лет, и у нас никогда не было сбоев данных.