Лупонос Дмитрий, разработчик 1С, эксплуататор 1С, настройка серверов для 1С

https://github.com/Luponos-Dmitry/postgrespro-utilites: репозиторий на GitHub

В процессе настроек различных серверов PostgreSQL накопил конфиги для 15 и 16 версии. Сделал публичным репозиторий, кратко опишу назначения файлов в нем

  1. Часть связанная с сервером 1с

https://github.com/Luponos-Dmitry/postgrespro-utilites/blob/main/_logcfg.xml

https://github.com/Luponos-Dmitry/postgrespro-utilites/blob/main/logcfg.xml

Соответственно ссылка на пустой конфигурационный файл технологического журнала и полный. В работающей системе не требуется перезапуск сервера, а, обладая правами администратора, мы можем вносить изменения в сам файл. Сервер 1С подхватит изменения и будет вести технологический журнал согласно настроек файла.
Используется для поиска, в основном, медленных запросов к базе данных и фризу пинга сервера 1С, что показывает рост очереди задач. Если мы наблюдаем рост очереди и малую нагрузку процессора при этом, то требуется оценить медленные запросы и оптимизировать их со стороны 1С приложения.

Также в репозитории есть gilev.sql, который можно залить в сервер СУБД PostgreSQL командой

<каталог установленной версии>/psql -U postgres -w (-W для ручного ввода пароля) -h <ip сервера postgres или 127.0.0.1, если подключение с него> -d gilev < gilev.sql 

2. Часть настроек Linux сервера для PostgreSQL

Напомню, что продуктовая эксплуатация PostgreSQL любых версий в среде Windows нецелесообразна и категорически не рекомендуется

Основной файл для тюнинга Linux под PostgreSQL sysctl.conf (расположение /etc/sysctl.conf)

Предложенный мной файл работает на серверах от 12Гб ОЗУ до 128 Гб ОЗУ на различных машинах и показывает прирост 20% и выше в различной среде. Но не рекомендую его ставить не думая в части команд ниже, читайте инструкцию по ним для Вашей конфигурации

kernel.shmmax=16777216
kernel.shmall=16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 4194304
net.core.wmem_default = 1048576
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Теперь настройка hugepages, приблизительно +5-10% к производительности выполняется после применения изменений sysctl.conf и запуска PostgresSQL с соединением к рабочей базе.
Конфигурация рабочей базы хранится в файле postgresql.conf, расположенном в корне папки “data” рабочей базы. Рекомендую сначала выбрать образец конфигурации для Вашего объема ОЗУ, которые у меня подписаны.
На первый взгляд покажется странным, что в конфигах репозитория настройки повторяются, но это сделано для быстрого отключения и перезапуска сервера на случай его выхода из строя.

Скрипт hugepages.sh выводит рекомендуемый размер страниц для указания в конфигурации postgresql.conf. Вам требуется указать pid процесса PostgreSQL на Вашей машине в скрипте и пустить на выполнение его.

pid=`head -1 /opt/pgpro/std-16/data/postmaster.pid` //расположение базы postgres-имя процесса всегда postmaster.pid

3.Часть обслуживания PostgreSQL

Скрипт ежедневного полного вакуума, в технологическое окно на 15-60 минут в cron:

<bash>crontab -e
<вносим вызов> 0 2 * * * /<путь к скрипту>/scrips/psql-vacuum-full.sh 
в результате, в 2 ночи каждый день проводим полный вакуум и переиндексацию индексов

Скрипт ежедневного сервиса выполняет вакуум, технически, можно ставить на ненагруженное время, например перерывы и обед. Обычно ставлю на -1 час к началу рабочего дня, начало обеда + 10 минут, конец дня.