Вопрос

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

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

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

Это было полезно?

Решение

Это обширная тема, поэтому здесь есть о чем почитать.

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

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

И, конечно же, прочитайте все остальные темы в Postgres/базах данных.:)

Другие советы

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

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

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

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

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

  1. Индексы – это первая часть.Первичные ключи автоматически индексируются.Я рекомендую ставить индексы на все внешние ключи.Далее поместите индексы на все столбцы, которые часто запрашиваются. Если к таблице часто используются запросы, в которых запрашивается более одного столбца, поместите индекс на эти столбцы вместе.

  2. Настройки памяти в вашей установке 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

Абсолютный минимум, который я рекомендую, — это ОБЪЯСНИТЬ АНАЛИЗИРОВАТЬ команда.Он будет отображать разбивку подзапросов, объединений и т. д., постоянно показывая фактическое количество времени, затраченное на операцию.Он также предупредит вас о последовательном сканировании и других неприятных неприятностях.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top