При переходе с файловых баз или MS SQL на PostgreSQL в среде Windows администраторы нередко сталкиваются с микрозадержками в управляемом интерфейсе 1С: подвисанием списков при прокрутке в начало или конец, паузами при закрытии форм документов и повышенной загрузкой процессора до 90–100%. Разберем по шагам, почему возникают подобные симптомы и как комплексно оптимизировать связку 1С:Предприятие и PostgreSQL.
В отличие от файлового режима, в СУБД PostgreSQL критически важно регулярно обновлять статистику и очищать базу от устаревших версий строк (dead tuples). Без актуальной статистики планировщик СУБД строит неоптимальные планы выполнения запросов динамических списков, что приводит к полному сканированию таблиц (Seq Scan) вместо использования индексов.
Рассмотрим скрипт для регулярного обслуживания базы через утилиту psql:
SET PGPASSWORD=ВашПароль
"C:\Program Files\PostgreSQL\9.6.3-1.1C\bin\psql.exe" --dbname=ИмяБазы --host=127.0.0.1 --port=5432 --username=postgres --command="reindex DATABASE ИмяБазы;"
"C:\Program Files\PostgreSQL\9.6.3-1.1C\bin\psql.exe" --dbname=ИмяБазы --host=127.0.0.1 --port=5432 --username=postgres --command="vacuum full analyze;"
Обратите внимание: команду VACUUM FULL необходимо запускать во внерабочее время, так как она накладывает исключительную блокировку на таблицы.
Одной из частых причин просадки производительности является работа процессора в энергосберегающем режиме. Клиент-серверное взаимодействие 1С работает по принципу «пинг-понга»: процессор то загружен сервером 1С, то простаивает в ожидании ответа СУБД. При активных энергосберегающих технологиях процессор постоянно сбрасывает и повышает тактовую частоту, работая на заниженных частотах.
Проанализируем необходимые настройки аппаратной части и операционной системы:
C-States и C1E, включим режим постоянной максимальной производительности и активируем Turbo Boost.Стандартные настройки PostgreSQL по умолчанию не рассчитаны на интенсивную нагрузку транзакционных систем 1С. Рассмотрим ключевые параметры, влияющие на отзывчивость интерфейса:
default_statistics_target рекомендуется установить в диапазоне от 1000 до 5000. Это позволяет планировщику точнее оценивать распределение данных в таблицах 1С.join_collapse_limit = 1 и from_collapse_limit = 1, чтобы оптимизатор не тратил лишние циклы CPU на перебор вариантов соединения таблиц, уже скомпонованных платформой.max_parallel_workers_per_gather = 0, чтобы избежать лишней конкуренции за потоки CPU при множестве мелких транзакций.shared_buffers (обычно 25% от доступной RAM для СУБД) и настроим effective_cache_size (до 50–75% от объема выделенной СУБД памяти). Для предотвращения вытеснения в своп при одновременной работе нескольких десятков баз параметр work_mem следует держать в разумных пределах (32MB–128MB).online_analyze.enable и plantuner. Их временное отключение на тестовом стенде позволяет оценить высвобождение вычислительных ресурсов.Если на одном сервере размещено множество информационных баз (например, 10–15 баз), типовые регламентные задания (индексация полнотекстового поиска, загрузка курсов валют, обновление классификаторов, расчет итогов) начинают запускаться одновременно, создавая пиковую нагрузку на все ядра процессора.
Выполним следующие действия по оптимизации регламентных заданий:
rphost, чтобы локализовать нагрузку.Задержка при закрытии форм документов часто связана с синхронной записью персональных настроек пользователя в системные таблицы ХранилищеСистемныхНастроек и обращением к локальному дисковому кэшу.
Проверим настройки безопасности на сервере и клиентских машинах:
data PostgreSQL), каталог кластера серверов 1С (srvinfo), а также системные временные папки %TEMP%.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8), повреждение которого может вызывать зависания управляемых форм при открытии и закрытии.