Развертывание PostgreSQL на сервере Bare Metal
Серверы Bare Metal подходят для развертывания СУБД.
В сценарии разберем установку и оптимизацию настроек СУБД PostgreSQL 15 на сервере с ОС Ubuntu 22.04.
Перед началом работы
Арендуйте сервер Bare Metal с публичным IP-адресом. Для корректной работы модели выбирайте конфигурации с объемом оперативной памяти более 32 ГБ.
Установите и настройте PostgreSQL
Установите PostgreSQL:
sudo apt updatesudo apt install postgresqlПереключитесь на профиль администратора PostgreSQL:
sudo su - postgresСоздайте базу данных и пользователя для нее:
createdb test_database \createuser -P test_user \psql -c "GRANT ALL PRIVILEGES ON DATABASE test_database TO test_user;"Переключитесь на основного пользователя:
exit
Оптимизируйте настройки PostgreSQL
PostgreSQL по умолчанию содержит набор параметров для более тонкой настройки ее работы. Например, вы можете увеличить производительность СУБД.
Откройте файл с конфигурацией СУБД:
sudo nano /etc/postgresql/<версия>/main/postgresql.confОтредактируйте параметры в файле:
# 25% ОЗУshared_buffers = 16GB# 50-75% ОЗУeffective_cache_size = 48GB# 128MB–256 MBwork_mem = 256MB# 1-2 GBmaintenance_work_mem = 2GB# обычно достаточно 100–200max_connections = 150# для возможности репликацииwal_level = replica# для максимальной производительности# synchronous_commit = off# checkpoint_timeout = 30minmax_wal_size = 4GBГде:
shared_buffers — определяет производительность СУБД. Увеличьте его до 25% от доступной оперативной памяти. Например, если у вас 64 ГБ ОЗУ, установите значение около 16 ГБ.
effective_cache_size — объем памяти, который резервируется под PostgreSQL в кэше ОС. Установите его на 50-75% от общей оперативной памяти.
work_mem — объем памяти, выделяемый для сортировки и хеширования операций. Увеличьте его до 128–256 МБ.
maintenance_work_mem — объем памяти для фоновых задач обслуживания, таких как «VACUUM» и «CREATE INDEX». Увеличьте его до 1-2 ГБ.
max_connections — лимит на соединения с СУБД. Устанавливайте исходя из предполагаемой нагрузки. Обычно достаточно 100–200 соединений.
wal_level — режим работы журнала предзаписи (WAL). Установите режим «replica», чтобы обеспечить возможность репликации БД в случае сбоя.
synchronous_commit — определяет, в какой момент транзакции считаются выполненными. Если вам важна максимальная производительность, установите значение «off». Однако это снизит надежность транзакций.
checkpoint_timeout — настраивает интервал между созданием контрольных точек восстановления. Для повышения производительности увеличьте этот интервал до 30 минут. Однако при сбое БД ее восстановление займет больше времени.
max_wal_size — управляет размером WAL-файлов. Увеличьте значение для больших рабочих нагрузок.
Оптимизируйте настройки файловой системы
Вы также можете повысить производительность СУБД за счет оптимизации настроек файловой системы. Для этого добавьте дополнительные параметры в конфигурационный файл диска:
noatime — отключает запись времени доступа к файлу.
nodiratime — отключает обновление времени доступа для каталогов.
Настройки снижают нагрузку на оперативную память. Чтобы их добавить:
Откройте файл с конфигурацией диска:
sudo nano /etc/fstabВ строке с диском, на котором установлена СУБД, добавьте параметры «noatime» и «nodiratime»:
...# <device> <dir> <type> <options> <dump> <fsck>UUID=0a3407de-014b-458b-b5c1-848e******** / ext4 defaults,noatime,nodiratime 0 1