Данная статья рассматривает варианты оптимизации 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 на разных конфигурациях сервера

Тест ОС Оптимизация Ресурсы ВМ 1С+СУБД Результаты, пользователи
1
Ubuntu 26.04 4 vCPU, 16 ГБ, 4 сокета Нет
 

55

максимум 55,56
2
Ubuntu 26.04 PostgreSQL 4 vCPU, 16 ГБ, 4 сокета Нет
 

56

максимум 57,47
3
Ubuntu 26.04 tunedunix-сокет 4 vCPU, 16 ГБ, 4 сокета Да
 

62

максимум 64,1
4
Ubuntu 26.04 PostgreSQLtunedunix-сокет 4 vCPU, 16 ГБ, 4 сокета Да
 

64

максимум 68,49
5
Ubuntu 26.04 PostgreSQLtunedunix-сокет 8 vCPU, 32 ГБ, 1 сокет Да
 

68

максимум 71,43
6
Ubuntu 26.04 PostgreSQLtunedunix-сокет 8 vCPU, 32 ГБ, 1 сокет Да
 

70

максимум 71,43
7
Ubuntu 26.04 PostgreSQLtunedunix-сокет 8 vCPU, 32 ГБ, 1 сокет Да
 

70

максимум 74,63
8
Ubuntu 24.04.4 PostgreSQLtunedunix-сокет 8 vCPU, 32 ГБ, 1 сокет Да
 

75

максимум 81,97
9
Ubuntu 24.04.4 PostgreSQLtunedunix-сокетHugePages 8 vCPU, 32 ГБ, 1 сокет Да
 

75

максимум 83,33