Что нужно знать о PostgreSQL до того, как он начнёт мешать работать
PostgreSQL заслуженно считается зрелой и надёжной СУБД: он давно развивается, аккуратен с данными и не преподносит сюрпризов при сбоях. Но у его устройства есть особенности, о которых лучше узнать заранее, а не в момент, когда база выросла втрое без видимых причин.
Конфигурация по умолчанию — самый недооценённый источник тормозов
Значения в базовом конфигурационном файле подобраны так, чтобы PostgreSQL запустился на любой машине. Под кэш выделяется скромный объём, рабочая память под сортировки и соединения задана минимально, планировщик по умолчанию исходит из осторожных предположений о скорости дисков. На сервере с быстрыми дисками и большим объёмом памяти это приводит к тому, что база лишний раз обращается к диску и выбирает не лучшие планы запросов. Правильные значения зависят не от «рекомендованных таблиц из интернета», а от того, сколько памяти на сервере, что на нём ещё работает и какого характера нагрузка.
Старые версии строк никуда не исчезают сами
При изменении строки PostgreSQL не переписывает её на месте, а создаёт новую версию — это то, что позволяет читателям не мешать писателям. Устаревшие версии убирает фоновый процесс, и на активной базе он вполне может не успевать. Тогда файлы данных и индексов раздуваются, чтение замедляется, а место на диске уходит непонятно куда. Настройка агрессивности уборки под конкретную нагрузку — одна из первых вещей, которые мы делаем на нагруженных базах.
Реплика — это не резервная копия
Резервный сервер с репликацией спасает от отказа оборудования, но не от ошибки человека: удалённые по ошибке данные исчезнут и на реплике, причём почти мгновенно. Поэтому репликацию мы всегда сочетаем с обычными резервными копиями и архивацией журналов транзакций — это то, что позволяет вернуть базу к состоянию на момент до неверной команды, а не только поднять её после сгоревшего диска.
Особенности PostgreSQL под 1С
Платформа 1С активно использует временные таблицы и генерирует специфические запросы, поэтому её сочетание с PostgreSQL требует отдельного внимания: подходящей сборки СУБД, аккуратной работы с памятью и настроенных регламентных заданий на стороне 1С, а не только на стороне базы. Ускорение здесь почти всегда результат совместной настройки, поэтому мы разбираем такие задачи вместе с сервером 1С целиком, а не отдельно взятую СУБД.
Обновления лучше делать до того, как они станут срочными
Каждая ветка PostgreSQL со временем перестаёт получать исправления, и однажды нужная функциональность или требования прикладного софта заставят обновляться в спешке. Плановое обновление устроено иначе: копию базы разворачивают на новой версии, прогоняют реальные отчёты и операции, сверяют поведение запросов и только потом назначают окно переключения — с сохранением возможности вернуться на прежнюю версию.
Кому и когда нужен постоянный присмотр
Если база обслуживает интернет-магазин, производство или учёт, за ней стоит наблюдать непрерывно: место, длительность запросов, успешность копий, состояние реплики. Настроить это один раз недостаточно — показатели меняются вместе с данными. Такую работу мы ведём в рамках обслуживания баз данных, где PostgreSQL живёт рядом с остальными СУБД компании и общим мониторингом.