2009-04-22 3 views
12

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

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

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

+0

Вам необходимо настроить файл postgresql.conf. И перезапустите базу данных. См. Эту ссылку для подробных настроек конфигурации: http://tekadempiere.blogspot.ae/2014/09/tuning-postgresql-for-better-performance.html – Sajeev

ответ

13

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

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

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

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

1

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

Это начало .

5

Прежде всего, ознакомьтесь с официальным руководством Performance Tips.

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

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

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

-2

Put FSYNC = выкл в вашем posgresql.conf, если вы доверяете свою файловую систему, в противном случае каждая операция PostgreSQL будет imediately записаны на диск (с Fsync системного вызова). У нас эта опция отключена на многих производственных серверах с 10 лет, и у нас никогда не было сбоев данных.

+2

Это рекомендация BAD. Вы рискуете повредить свои данные. Конечно, вам может повезти в течение нескольких лет, как и у вас. Такое же усиление может быть достигнуто с помощью контроллера рейда с кешем записи с батареей - никакого дополнительного риска. – tommym

+0

Мы доверяем файловым системам ext3. Кэш записи ограничен. Например, мы поддерживаем базу данных Century21 France с 8 лет; более 3000 человек записывают эту базу данных в режиме реального времени. У нас есть самодельное промежуточное программное обеспечение для зеркалирования всех запросов в другой базе данных в случае сбоя сервера, но у нас не было никаких проблем. См. Http://www.postgresql.org/docs/8.1/interactive/runtime-config-wal.html – fredz

+0

Обычно плохой совет. Postgres не может гарантировать согласованность с этой настройкой. Отключение fsync означает, что он даже никогда не может быть записан в кэш дисков. Не делай этого. Просто потому, что вы не заметили коррупцию, очень мало ... esp, если у вас никогда не было крушения. –

3

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

  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

+0

PK автоматически индексируются? Почему они не отображаются в списке «индексы» в инструменте pgAdmin? – systemoutprintln

+0

Повысьте правильную плюрализацию слова «индекс» от самого капитана Педанти. Спасибо @Mauli! – Rastus7

Смежные вопросы