0

Я учусь целый ряд вопросов, связанных с производительности моего приложения написано в Java, которая насчитывает около 100000 посещений в день и каждый визит в среднем от 5 до 10 чтений/записей на двух базовых таблицах базы данных (разделенных поровну), мощность которых составляет как между 1, так и 3 миллиона записей (i доступ к БД через спящий режим).Postgres и контрольный список

В моих двух основных таблицах хранится информация о пользователе (около 60 столбцов типа varchar, integer и timestamptz), а другая связана с отображаемыми данными (около 30 столбцов здесь в основном varchar, integer, timestamptz).

Основной проблемой я столкнулся, возможно, имели падение производительности моего сайта (давайте говорить о временных нагрузок в течение 5 секунд, что, очевидно, не зависит только от производительности базы данных), является использование FillFactor, которое в настоящее время является значением по умолчанию 100 (что оно используется всегда, когда данные не меняются ..).

Очевидно коэффициент заполнения это же по индексу (есть 10 за каждые 2 таблиц типа BTree)

В настоящее время на моих основных таблиц я делаю

  • 40% Выбор операции
  • 30% обновления операции
  • 20% операции вставки
  • 10% удаление операций.

Моя база данных также состоит из 40 других таблиц второстепенного значения (есть только другие 3 с одинаковой мощностью пользователя).

Мои вопросы:

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

базы данных на сервере, предназначенном (16 Гб ОЗУ, 8 сердечника) и хранения он находится на SSD диске (данные из резервной копии, все дни и перемещены на другое место хранения)

+1

Вы можете пройти через эту страницу вики: http://wiki.postgresql.org/wiki/Performance_Optimization Я также очень рекомендую «Высокопроизводительную книгу Postgres». Действительно стоит покупать. –

ответ

0

Вы, вероятно, попали в «колена» вашей когда весь индекс сильно используемых таблиц больше не вписывается в общую память, поэтому дисковый ввод-вывод замедляет работу. Подтвердите, проверяя, превышает ли нормальный уровень ввода-вывода диска. Если да, попробуйте увеличить общую память (shared_buffers), или если это уже достигнуто, отрегулируйте размер общей памяти системы или добавьте больше системной памяти, чтобы вы могли повысить ее. Вам также, вероятно, придется приступить к настройке буферов temp, рабочей памяти и памяти обслуживания, а также параметров WAL, таких как checkpoint_segments и т. Д.

На PostgreSQL.org есть некоторые перфомансирующие подсказки, а Google - ваш друг.

Редактировать: (для обращения к первому комментарию). Первый признак недостаточной памяти - это значительное снижение производительности, а все остальное - одно и то же. Изменение коэффициента заполнения таблицы не будет иметь никакого значения, если вы нажмете на колено в использовании памяти, если что-нибудь это сделает его хуже w.r.t. (что я предполагаю, означает, что «db reads»), поскольку информация о строке будет расширяться на большее количество страниц на диске с пустым пространством на каждой странице, поэтому для сканирования таблиц требуется большее количество операций ввода-вывода. Но коэффициент заполнения менее 100% может помочь с операциями UPDATE, но я нашел, что настройка параметров WAL может компенсировать большую часть времени при использовании индексов (если вы уже не оптимизировали их). Итог, вам нужно профилировать все тяжелые запросы с помощью EXPLAIN, чтобы узнать, что поможет. Но на первый взгляд, я уверен, что это проблема памяти даже с базой данных на SSD. Мы говорим много случайных чтений и случайных записей, и многие SSD действительно получают хуже, чем жесткие диски после множества случайных небольших записей.

+0

Кластеризация/разбиение этих таблиц может быть решением (с FillFactor до 100)? –

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