Данная статья рассматривает варианты оптимизации PostgreSQL и параметров системы для получения больше результата в нагрузочном тесте Гилева. Оптимизация выполняется на уже подготовленной к запуску теста системе. Не стоит применять данные конфигурации на рабочем сервере вашего предприятия, так как они предназначены именно для проведения синтетического теста.
В качестве тестового стенда был взят за основу тарифу X8, данный тариф вы можете оформить в нашем личном кабинете. Все тарифы доступны на странице — https://mclouds.ru/pricing/vps-1c/
Конфигурация ВМ
- Размещение в Platinum-кластере
- 8 vCPU, Cores per socket — 8, Number of sockets — 1, Virtual CPU hot add — Disabled, Expose hardware-assisted CPU virtualization to guest OS — Disabled
- 32 GB vRAM, Memory hot add — Disabled
- Hard Disk — 60 GB
- Тестируемые ОС: Ubuntu 26.04 LTS, Ubuntu 24.04.4 LTS;
- Дистрибутивы, скачанные с сайта 1С для разработчиков:
- PostgreSQL для Ubuntu 24.04 (64-bit), версия 18.1-2.1c;
- 1С:Предприятие 8.5 для Linux, версия 8.5.1.1302.
- СУБД и 1С находятся на одном сервере (для возможности подключения ИБ через unix-сокет).
Обратите внимание, что на момент написания статьи на сайте 1С для разработчиков последняя версия PostgreSQL предназначена для Ubuntu 24.04, официальной поддержки Ubuntu 26.04 еще нет.
Конфигурация PostgreSQL
Параметры в файле /etc/postgresql/18/main/postgresql.conf, актуальные для конфигурации ВМ 8 vCPU/ 32 GB vRAM. Если конфигурация не такая, то необходимо изменить связанные параметры, тут можно найти как они рассчитываются. Для использования параметров huge_pages нужно отдельно их настраивать (см. ниже).
max_connections = 1000
ssl = off
shared_buffers = 8192MB
huge_pages = on
huge_page_size = 2MB
temp_buffers = 256MB
work_mem = 64MB
maintenance_work_mem = 4GB
max_files_per_process = 1000
bgwriter_delay = 20ms
bgwriter_lru_maxpages = 400
bgwriter_lru_multiplier = 4.0
effective_io_concurrency = 200
maintenance_io_concurrency = 200
max_worker_processes = 8
max_parallel_workers_per_gather = 4
max_parallel_maintenance_workers = 4
max_parallel_workers = 8
wal_level = minimal
fsync = off
synchronous_commit = off
wal_compression = off
wal_buffers = 64MB
wal_writer_delay = 200ms
wal_writer_flush_after = 1MB
max_wal_size = 16GB
min_wal_size = 8GB
max_wal_senders = 0
seq_page_cost = 0.4
random_page_cost = 0.4
effective_cache_size = 24GB
autovacuum = on
autovacuum_worker_slots = 16
autovacuum_max_workers = 4
autovacuum_naptime = 60s
autovacuum_vacuum_cost_limit = -1
row_security = off
max_locks_per_transaction = 256
escape_string_warning = off
standard_conforming_strings = off
HugePages и Transparent HugePages
Параметр HugePages регулирует размер страниц памяти, позволяет СУБД лучше работать с большими массивами данных. Transparent HugePages отличается от стандартного тем, что страницы выделяются динамически, рекомендуется его отключать.
По умолчанию параметр Transparent HugePages должен быть в режиме madvise, команды для проверки:
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
Отключаем THP через systemd-юнит, чтобы после перезагрузки THP не включался:
sudo tee /etc/systemd/system/disable-thp.service > /dev/null << 'EOF'
Копируем и вставляем следующий блок:
[Unit]
Description=Disable Transparent Huge Pages
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/usr/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
Применяем изменения и включаем юнит:
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service
Перезагружаемся и проверяем, что значение изменилось:
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
Далее необходимо рассчитать количество нужных HugePages. Для этого разделим значение shared_buffers, которое указали в postgresql.conf, на размер одной страницы (2 MB) и к результату добавляем 10%.
Пример:
8192 / 2 = 4096, прибавляем 10% и округляем до целого значения, получаем 4506 страниц.
Нужно указать полученное количество страниц, открываем /etc/sysctl.conf и в конце указываем строку:
vm.nr_hugepages = <Кол-во страниц>
Применяем изменения:
sudo sysctl -p
Теперь, так как взяли размер страницы 1 GB, вместо стандартных 2 MB, то нужно указать этот размер в файле /etc/default/grub в строке GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="default_hugepagesz=2M hugepagesz=2M hugepages=4506"
Применяем изменения:
sudo update-grub
Перезагружаемся и проверяем, что все изменения применились:
grep -i huge /proc/meminfo
Подключение ИБ 1С через unix-сокет PostgreSQL
Необходимо, чтобы 1С и PostgreSQL были установлены на одном сервере.
Изменяем строку # «local» is for Unix domain socket connections only в файле /etc/postgresql/18/main/pg_hba.conf:
local all all trust
Применяем изменившуюся конфигурацию:
psql -h localhost -U postgres -c 'SELECT pg_reload_conf();'
Находим и сохраняем путь UNIX сокета:
psql -h localhost -U postgres -c 'SHOW unix_socket_directories;'
Выдаем полные права пользователю usr1cv8:
psql -h localhost -U postgres -c 'CREATE ROLE usr1cv8 superuser; ALTER ROLE usr1cv8 WITH LOGIN;'
Теперь нужно создать новую информационную базу в 1С и написать в графе Сервер баз данных путь UNIX сокета, полученный ранее. Также в качестве пользователя сервера БД нужно указать usr1cv8, а в пароле пользователя поставить один пробел. В новой информационной базе потребуется заново загрузить тест Гилева через Конфигуратор.
TuneD
Чтобы не было ограничений по производительности в связи с электропитанием, необходимо заменить стандартную схему электропитания на профиль throughput-performance из tuned.
Устанавливаем пакет:
sudo apt install tuned
Запускаем и добавляем его в автозагрузку:
sudo systemctl start tuned
sudo systemctl enable tuned
Отключаем стандартную службу электропитания:
sudo systemctl stop power-profiles-daemon
sudo systemctl disable power-profiles-daemon
sudo systemctl mask power-profiles-daemon
Устанавливаем профиль throughput-performance в tuned:
sudo tuned-adm profile throughput-performance
После перезагрузки проверяем, что tuned работает и выбран нужный профиль:
sudo systemctl status tuned
tuned-adm active
tuned-adm verify
Таблица результатов тестов производительности 1С и PostgreSQL на разных конфигурациях сервера