Настройка производительности PostgreSQL - PullRequest
13 голосов
/ 23 апреля 2009

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

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

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

Ответы [ 6 ]

14 голосов
/ 23 апреля 2009

Это широкая тема, поэтому вы можете прочитать о ней много вещей.

  • ОБЪЯСНЯЙТЕ И ОБЪЯСНЯЙТЕ АНАЛИЗ чрезвычайно полезен для понимания того, что происходит в вашем db-engine
  • Убедитесь, что соответствующие столбцы проиндексированы
  • Убедитесь, что нерелевантные столбцы не проиндексированы (производительность вставки / обновления может снизиться, если слишком много индексов необходимо обновить)
  • Убедитесь, что ваш postgres.conf настроен правильно
  • Знать, что такое work_mem и как оно влияет на ваши запросы (в основном полезно для больших запросов)
  • Убедитесь, что ваша база данных правильно нормализована
  • ВАКУУМ для очистки старых данных
  • ANALYZE для обновления статистики (цель статистики для количества статистики)
  • Постоянные соединения (вы можете использовать менеджер соединений, такой как pgpool или pgbouncer)
  • Понять, как строятся запросы (объединения, подвыборы, курсоры)
  • Кэширование данных (т.е. memcached) является опцией

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

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

5 голосов
/ 23 апреля 2009

Прежде всего, прочитайте официальное руководство Performance Советы .

Выполнение ОБЪЯСНЕНИЕ по всем вашим запросам и понимание его вывода сообщит вам, насколько ваши запросы выполняются настолько быстро, насколько это возможно, и следует ли добавлять индексы.

Как только вы это сделаете, я бы посоветовал прочитать часть руководства Конфигурация сервера . Есть много опций, которые можно настроить для дальнейшего повышения производительности. Убедитесь, что вы понимаете параметры, которые вы устанавливаете, поскольку они могут так же легко снизить производительность, если они установлены неправильно.

Помните, что каждый раз, когда вы меняете запрос или параметр, тестирует и тест , чтобы вы знали результаты каждого изменения.

3 голосов
/ 23 апреля 2009

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

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

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

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers

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

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

2 голосов
/ 23 апреля 2009
1 голос
/ 23 апреля 2009

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

Это лучший способ начать.

0 голосов
/ 23 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...