Стабильная и быстрая работа платформы «1С:Предприятие» — критически важный фактор для бизнеса. Команда Postgres Professional ведёт постоянную работу над совершенствованием ядра СУБД, устраняя архитектурные узкие места, которые проявляются при высоких нагрузках, характерных для 1С.

Недавно мы выпустили Postgres Pro Enterprise 17.6, куда добавили новый пакет улучшений для 1C.
Документация по настройке Postgres Pro под 1С
Начнём с того, о чём нас часто спрашивали партнёры и клиенты. Ранее администраторам приходилось собирать информацию о правильной конфигурации СУБД по крупицам из разных источников. Теперь мы выпустили официальный раздел документации «Настройка Postgres Pro для решений 1С». Это консолидированный набор рекомендаций (Best Practices), который снимает множество вопросов по тюнингу производительности и правильной эксплуатации кластера.
Уменьшение количества сообщений между серверными процессами
Специалисты, работающие с высоконагруженными базами, знакомы с проблемой большого количества сообщений аннулирования кеша каталога. Ранее мы уже оптимизировали этот механизм для таблиц, но в новом релизе пошли дальше (развитие фичи из версии 14.7). Теперь мы подавляем такие сообщения при создании и удалении индексов временных таблиц, а также при сборе статистики по ним.
Поскольку временные объекты видны только в рамках текущей сессии, рассылка уведомлений другим процессам не нужна. Дополнительно мы заменили циклические блокировки (spinlocks) в общей очереди сообщений на более эффективные примитивы синхронизации. Это устранило узкое место при высокой конкуренции процессов.
Отказ от блокировок индексов временных таблиц
Даже кратковременные блокировки при работе с временными таблицами могут потреблять ощутимый ресурс CPU. Мы внедрили параметр skip_temp_rel_lock, который позволяет пропускать установку блокировок не только для самих временных отношений, но и для их индексов. Это логичное развитие функциональности (из версии 17.4), которое даёт прирост производительности на частых операциях DDL.
Оптимизация очистки временных таблиц
Ранее операции очистки (TRUNCATE) работали недостаточно эффективно: требовалось сканирование всего пула локальных буферов отдельно для каждого слоя отношения (самой таблицы, TOAST-таблицы, индексов).
Мы переработали этот алгоритм. Теперь информация о буферах, подлежащих удалению, собирается предварительно, и сканирование пула выполняется всего один раз для всех слоёв сразу. Это ускоряет нетранзакционные операции усечения временных таблиц и снижает накладные расходы.
Ускорение поиска в динамических списках 1С
В 1С часто используется поиск по подстроке. Для оператора LIKE по полям типа mvarchar (используемых для совместимости с MS SQL) планировщик мог неверно оценивать селективность и выбирать неоптимальные планы. Мы устранили эту проблему: теперь оценка стоимости выполняется корректно, что позволяет оптимизатору чаще выбирать индексный доступ вместо последовательного сканирования.
Оптимизация запросов с соединениями ANTI JOIN
Сложные запросы с конструкциями NOT EXISTS или NOT IN, которые преобразуются в ANTI JOIN, могли выполняться медленно из-за идентичного сканирования для одних и тех же параметров.
В оптимизатор добавлена возможность применять мемоизацию узлов для параметризованных соединений ANTI JOIN. Это означает, что результаты вычислений для определённых параметров запоминаются и используются повторно, исключая лишние циклы обработки данных.
Оптимизация блокировок на этапе планирования запроса
При выполнении запросов с большим количеством отношений возникала высокая конкуренция за блокировки системных таблиц pg_attribute и pg_statistic. Мы оптимизировали этот механизм, уменьшив количество необходимых запросов на блокировку при отсутствии информации в кэше. Это обеспечивает более плавную работу системы при подключении большого количества новых сессий (с пустыми кэшами), которые сразу пытаются исполнять большие запросы по табличкам с широкими индексами.
Оптимизация при VACUUM ANALYZE таблиц каталога
Ранее при анализе таблиц системного каталога происходило аннулирование файла pg_internal.init — важного кэша информации о системных каталогах. Его пересоздание требовало ресурсов и могло замедлять подключение пользователей.
Теперь алгоритм изменён: файл pg_internal.init не аннулируется при анализе каталога, даже если статистика часто обновляется. Это гарантирует, что новые сессии будут подключаться быстро и без задержек независимо от работы фоновых процессов обслуживания.
Заключение
Представленные изменения — результат глубокого анализа работы Postgres Pro под нагрузками, характерными для крупных корпоративных систем. Мы продолжаем совершенствовать продукт, фокусируясь на реальных инженерных задачах производительности и масштабируемости. Узнать больше об этих и других функциях, оптимизирующих работу с «1С:Предприятие», можно на странице Postgres Pro Enterprise для 1С.