Как ускорить работу 1С на СУБД PostgreSQL под Windows Server и устранить зависания на тяжелых операциях?

Системный администратор 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

Обеспечение высокой производительности клиент-серверной версии 1С:Предприятие при работе на бесплатной СУБД PostgreSQL — задача нетривиальная, особенно если сервер работает под управлением операционной системы Windows Server. Часто администраторы и разработчики сталкиваются с ситуацией, когда мощное серверное оборудование загружено лишь частично, но пользователи продолжают жаловаться на многосекундные задержки при выполнении критически важных операций (например, при формировании сетки занятости в медицинских информационных системах или построении сложных отчетов). В этой статье мы подробно и пошагово разберем, как локализовать «узкие места», правильно настроить СУБД, исправить критические ошибки администрирования операционной системы и оптимизировать саму конфигурацию 1С.

Шаг 1. Анализируем и исправляем настройки Windows Server

Прежде чем приступать к тонкой настройке СУБД или оптимизации программного кода 1С, необходимо убедиться в том, что операционная система Windows Server настроена корректно и не ограничивает производительность оборудования.

Восстановление файла подкачки (Pagefile)

Одной из наиболее распространенных ошибок является полное отключение файла подкачки на серверах с большим объемом оперативной памяти (например, 32 ГБ и более). Администраторы полагают, что если физической памяти достаточно, то отключение виртуальной памяти повысит скорость работы системы. Однако архитектура Windows Server устроена принципиально иным образом. Операционная система требует наличия файла подкачки для резервирования виртуального адресного пространства (Commit Charge). Без него процессы СУБД postgres.exe или рабочие процессы сервера 1С rphosts могут сталкиваться с отказами в выделении памяти или вести себя нестабильно, даже когда физическая ОЗУ занята лишь наполовину.

Для исправления этой ситуации выполним следующие действия:

  1. Вернем файл подкачки на быстрый системный SSD-диск.
  2. Зафиксируем его размер, установив одинаковое минимальное и максимальное значение (например, от 4096 МБ до 8192 МБ), чтобы избежать фрагментации файла подкачки в процессе работы.

Размер кластера NTFS для дисков с базами данных

При форматировании дисков под базы данных PostgreSQL по умолчанию часто создается файловая система NTFS с размером кластера 4 КБ. Для СУБД это крайне неэффективно. Стандартом производительности для дисковых подсистем под управлением баз данных является размер кластера 64 КБ. Несоответствие физического размера страниц СУБД и кластера операционной системы приводит к возникновению избыточных операций ввода-вывода (так называемый Split I/O), что существенно снижает скорость работы SSD-накопителей на операциях случайного чтения и записи.

Настройка планов электропитания

Убедимся, что в настройках электропитания Windows Server выставлена схема «Высокая производительность» (High Performance), а в настройках BIOS/UEFI сервера отключены все технологии энергосбережения процессора (C-States, Intel SpeedStep и др.). Это гарантирует, что тактовая частота ядер процессора всегда будет находиться на максимальном уровне, предотвращая микрозадержки при переключении частот в моменты резкого роста нагрузки от 1С.

Шаг 2. Тонкая настройка конфигурационного файла postgresql.conf

Стандартные настройки PostgreSQL по умолчанию ориентированы на крайне слабые машины, чтобы СУБД могла гарантированно запуститься на любом компьютере. Для сервера с 32 ГБ оперативной памяти и быстрыми серверными SSD-накопителями базовые параметры требуют кардинального изменения. Откроем конфигурационный файл postgresql.conf и внесем следующие изменения:

Управление кэшем и планировщиком запросов:

Оптимизация операций записи и временных таблиц:

Настройка механизма очистки (Autovacuum):

Платформа 1С генерирует огромное количество временных таблиц и часто обновляет данные. Если механизм автоматической очистки (Autovacuum) не успевает обрабатывать изменяемые таблицы, статистика СУБД устаревает, и запросы начинают критически тормозить. Зададим более агрессивные параметры очистки:


autovacuum_max_workers = 4
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02

Это заставит СУБД гораздо быстрее реагировать на изменение данных в таблицах и своевременно обновлять статистику планировщика.

Шаг 3. Анализ запросов с помощью Технологического Журнала (ТЖ) 1С

Если после настройки операционной системы и СУБД точечные операции (например, открытие сетки занятости сотрудников) продолжают выполняться медленно, проблема может крыться в неоптимальном коде конфигурации или отсутствии необходимых индексов в СУБД. Чтобы точно локализовать проблему, настроим Технологический Журнал 1С.

Создадим или отредактируем файл конфигурации технологического журнала logcfg.xml (он должен располагаться в каталоге установки платформы 1С, например, C:\Program Files\1cv8\conf\). Настроим его на сбор событий работы с СУБД PostgreSQL и вызовов сервера, длительность которых превышает 5 секунд (5000 миллисекунд):


<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-journal">
    <log location="C:\v8\logs" history="24">
        <event filter="">
            <eq property="Name" value="DBPOSTGRS"/>
            <gt property="Duration" value="5000000"/>
        </event>
        <event filter="">
            <eq property="Name" value="CALL"/>
            <gt property="Duration" value="5000000"/>
        </event>
        <property name="all"/>
    </log>
</config>

После активации технологического журнала выполним на стороне клиента проблемную операцию (например, сформируем сетку занятости). Откроем сформированные лог-файлы в каталоге C:\v8\logs и найдем строки с событием DBPOSTGRS. Проанализируем SQL-запрос. Если мы видим регулярные операции последовательного сканирования таблиц (Seq Scan) на больших объемах данных, это явный признак того, что в конфигурации 1С для используемых реквизитов или измерений регистров не установлено свойство «Индексировать».

Шаг 4. Оптимизация на уровне конфигурации 1С:Медицина

Сетка занятости сотрудников в медицинских конфигурациях — это сложнейший интерактивный инструмент, который на лету выполняет запросы к множеству регистров (графики работы, занятость кабинетов, смены, записи пациентов). Чтобы ускорить ее работу, применим следующие практические рекомендации:

  1. Ограничение периода отображения: По умолчанию пользователи часто открывают сетку с периодом в 14 или 30 дней. Это заставляет систему считывать и отрисовывать миллионы ячеек. Настроим у регистраторов по умолчанию отображение сетки на 1–2 дня. При необходимости они смогут вручную переключить период.
  2. Шаг шкалы времени: Установим оптимальный шаг шкалы времени (например, 20 или 30 минут вместо 5–10 минут). Это значительно снизит количество вычислений на сервере при отрисовке интерфейса.
  3. Интервал автообновления: Полностью отключим автообновление формы занятости каждые 5–10 секунд, заменив его на ручное обновление кнопкой, либо увеличим интервал до разумных 5 минут. Это предотвратит лавинообразный рост нагрузки на сервер СУБД, когда 50 пользователей одновременно держат форму открытой.
  4. Проверка индексов: Если конфигурация является «дописанной» (кастомизированной), проверим все новые добавленные измерения в регистрах сведений, связанных с графиками и записями. Все они должны иметь признак Индексировать или входить в состав комплексных индексов.

Шаг 5. Сравнение СУБД в тестовой «песочнице»

Если все вышеперечисленные методы оптимизации PostgreSQL не привели к желаемому результату, рекомендуется провести сравнительный тест производительности на альтернативной СУБД. Поскольку объем баз данных невелик (основная база 3.5 ГБ, остальные по 1 ГБ), мы можем развернуть тестовую «песочницу»:

  1. Установим бесплатную версию СУБД MS SQL Server Developer Edition на тестовом сервере или локальной машине администратора.
  2. Перенесем копию проблемной базы данных 1С на MS SQL Server.
  3. Проведем замеры производительности с помощью теста Гилева или путем замера времени формирования сетки занятости на одном и том же оборудовании.

Подобный эксперимент позволит точно определить источник проблемы. Если на MS SQL Server операция выполняется мгновенно, значит, узкое место кроется в неэффективной работе планировщика старой версии PostgreSQL 10.5 под ОС Windows. В таком случае оптимальным решением станет либо приобретение лицензии MS SQL Server, либо переход на современную сборку PostgreSQL (версии 15 или 16), оптимизированную для работы с 1С, либо перенос сервера баз данных PostgreSQL под управление операционной системы Linux, где эта СУБД демонстрирует гораздо более высокую производительность «из коробки».

← На главную