При росте объема информационной базы и увеличении числа одновременно работающих пользователей разработчики и системные администраторы часто сталкиваются с падением производительности. В ситуациях, когда конфигурация разработана под обычные формы (толстый клиент), возникает закономерный вопрос: даст ли переход на СУБД (MS SQL Server или PostgreSQL) ощутимый выигрыш в скорости, если интерфейс и архитектура логики остаются прежними? Проанализируем архитектурные отличия, преимущества, скрытые узкие места и пошаговый план перехода.
Файловая база данных (формат .1CD) отлично справляется с задачами при малом числе пользователей (до 3–5 человек) и скромных объемах. Однако по мере роста нагрузки проявляются фундаментальные ограничения файловой архитектуры:
.1CD накладывает жесткое ограничение на максимальный размер одной таблицы и ее индексов (4 ГБ). При общем объеме базы в 5 ГБ крупные таблицы (например, регистры сведений, регистры накопления или журнал регистрации) могут подойти к критическому порогу, что чревато внезапными сбоями транзакций и риском повреждения базы.Рассмотрим, что происходит с толстым клиентом при переходе на трехзвенную архитектуру (клиент — сервер 1С:Предприятия — СУБД). В обычном приложении исполняемый код форм и модулей объектов выполняется преимущественно в контексте клиентского процесса. Это накладывает определенные особенности на производительность:
Shared Memory.Разберем последовательность шагов, которая позволит максимально эффективно перевести базу на SQL и устранить замедления в работе отчетов и документов.
По умолчанию конфигурации на обычном приложении функционируют в автоматическом режиме управления блокировками. В этом режиме СУБД использует строгие уровни изоляции, что приводит к конфликтам между читателями и писателями (блокировка чтения при записи). Переход на управляемый режим позволяет решить эту проблему:
Управляемый (или Автоматический и управляемый для постепенного перевода объектов).READ_COMMITTED_SNAPSHOT и ALLOW_SNAPSHOT_ISOLATION). Это позволит формировать отчеты и читать данные без блокировки транзакций записи.Выясним причину, почему документы и отчеты начинают замедляться при росте объема. Основная причина — накопление записей в таблицах при наличии алгоритмических ошибок. Проанализируем проблемные места:
Ссылка.Договор.Владелец) внутри циклов и в секциях ГДЕ запросов.При росте таблиц оптимизатор запросов СУБД начинает строить неверные планы выполнения (например, полное сканирование таблицы Index Scan вместо поиска по индексу Index Seek), если статистики устарели. Настроим обязательные регламентные задания в СУБД:
UPDATE STATISTICS для всех таблиц базы.REBUILD) и реорганизацию (REORGANIZE) индексов во внерабочее время.tempdb на быстрых SSD/NVMe накопителях и разделим ее на несколько файлов данных (по числу физических ядер процессора).Max Degree of Parallelism (MAXDOP) равным 1, чтобы исключить накладные расходы на распараллеливание простых запросов платформы 1С.Для объективной оценки производительности используем встроенные и системные инструменты анализа:
TLOCKS (ожидания блокировок), TDEADLOCK (взаимоблокировки) и SDBL (длительные запросы к СУБД с порогом выполнения от 3–5 секунд). Это позволит точно выявить медленные участки кода без субъективных оценок.Перевод самописной базы на толстом клиенте объемом от 5 ГБ с числом активных пользователей 10–15 человек на SQL-сервер однозначно целесообразен. Переход снимет жесткие лимиты на размер таблиц, обеспечит высокую надежность хранения данных и устранит блокировки на уровне файлов. Однако максимальный прирост скорости достигается только в комплексе с включением управляемых блокировок, регулярным обслуживанием СУБД и оптимизацией тяжелых запросов в коде конфигурации.