Переход с проприетарной СУБД Microsoft SQL Server на свободную PostgreSQL — это серьезный шаг, требующий не просто переноса данных, а глубокой адаптации инфраструктуры. Если после миграции вы столкнулись с резким падением производительности, вплоть до невозможности проведения документов, разберем, что могло пойти не так и как вернуть системе былую скорость.
Важно понимать: PostgreSQL и MSSQL имеют принципиально разные механизмы оптимизации запросов. MSSQL «прощает» многие огрехи в коде 1С за счет «умного» оптимизатора. PostgreSQL требует более жесткого соблюдения правил работы с индексами и статистикой. Основные причины тормозов:
postgresql.conf настроен на минимальное потребление ресурсов и не подходит для высоконагруженных систем с 40 пользователями.PostgreSQL из репозиториев Linux может работать медленнее, чем специально адаптированная сборка от компании 1С, которая содержит патчи для оптимизации работы со временными таблицами и планами запросов.Полное соединение или запросы к виртуальным таблицам СрезПоследних) требуют иной стратегии индексации.Первым делом проанализируем параметры postgresql.conf. Значения по умолчанию не позволят базе данных работать быстро. Нам необходимо адаптировать параметры под объем доступной оперативной памяти сервера:
shared_buffers: установите значение около 25% от всей оперативной памяти сервера.effective_cache_size: задайте около 50-75% оперативной памяти.work_mem: требует аккуратной настройки, так как этот объем выделяется на каждую операцию сортировки или соединения. При большом количестве пользователей чрезмерное значение может привести к нехватке памяти (OOM Killer).maintenance_work_mem: увеличьте для ускорения процесса обслуживания базы данных и перестроения индексов.В PostgreSQL критически важную роль играет процесс autovacuum. В отличие от MSSQL, здесь данные не перезаписываются на месте, а помечаются как удаленные. Если autovacuum не успевает очищать «мертвые» строки (bloat), производительность будет стремительно падать. Рассмотрим настройку параметров для интенсивных таблиц (регистров):
Настройте интенсивность очистки для таблиц с большим объемом записи, уменьшив порог срабатывания:
ALTER TABLE ИмяТаблицы SET (autovacuum_vacuum_scale_factor = 0.01);
ALTER TABLE ИмяТаблицы SET (autovacuum_analyze_scale_factor = 0.005);
Рассмотрим, как 1С работает с запросами на PostgreSQL. Поскольку планировщик запросов более чувствителен к статистике, необходимо следить за актуальностью данных. Если вы замечаете, что конкретные отчеты или проведение документов «зависают», используйте расширение pg_stat_statements для выявления самых «тяжелых» запросов.
При написании запросов старайтесь избегать:
ПОЛНОЕ СОЕДИНЕНИЕ, если можно обойтись ЛЕВОЕ СОЕДИНЕНИЕ.PostgreSQL крайне чувствителен к задержкам дисковой подсистемы (I/O Latency). Если у вас используется HDD, вы не добьетесь производительности, сравнимой с MSSQL на быстрых дисках. Разделите потоки данных:
NVMe SSD.WAL на отдельный физический диск, чтобы запись логов не блокировала чтение данных.Переход на свободную СУБД — это задача для системного администратора, готового погрузиться в тонкую настройку ОС и СУБД. Не пытайтесь просто перенести файлы базы данных. Используйте специализированную сборку postgresql-1c, проводите регулярное обслуживание индексов, следите за статистикой запросов и помните, что 40 пользователей — это значительная нагрузка, требующая квалифицированной настройки каждого уровня системы.