Вопрос выбора стабильной версии платформы для 1С:Управление производственным предприятием (УПП) остается одним из самых острых для системных администраторов и разработчиков. Конфигурация УПП, построенная на «обычных формах» и использующая старые механизмы работы с блокировками, начинает вести себя непредсказуемо на свежих релизах платформы 8.3. В этой статье мы подробно проанализируем, почему новые версии (8.3.22 и выше) могут вызывать деградацию производительности, и выясним, какую версию стоит считать «золотым стандартом» для УПП в конце 2024 года.
Разберем ситуацию, с которой сталкиваются многие специалисты. При переходе на платформы версии 8.3.22, 8.3.23 и выше пользователи начинают жаловаться на «задумчивость» системы, участившиеся взаимоблокировки (deadlocks) и ошибки SDBL. Проанализируем причины этого явления:
TempDB в MS SQL Server были существенно переработаны. Для современных конфигураций (ERP, КА 2.5) это дает прирост, но для УПП, работающей в режиме совместимости 8.2.13 или 8.2.16, это часто оборачивается конфликтами на уровне метаданных SQL.rphost более активно потребляет ресурсы на обслуживание индекса полнотекстового поиска и управление сеансами. Для огромных баз УПП это создает паразитную нагрузку.Рассмотрим конкретные версии платформы, которые показали себя наиболее стабильно в реальных производственных условиях. Посмотрим на опыт внедрений и отзывы специалистов.
Ветка 8.3.21 — Последний оплот стабильности. Для большинства систем на базе УПП именно релизы ветки 8.3.21 (например, 8.3.21.1622) считаются наиболее удачными. Выясним почему: в этой ветке еще не внедрены радикальные изменения в ядро работы с SQL, которые появились в 8.3.22. Она поддерживает современные требования безопасности, работу с КЭП, но при этом корректно обрабатывает запросы старого образца.
Проблема релизов 8.3.24 и 8.3.25. Рассмотрим ситуацию с самыми свежими версиями. Несмотря на исправления багов, в них замечена критическая ошибка: невозможность загрузки конфигурации (файла .cf) в пустую базу данных для некоторых релизов УПП. Это связано с изменением структуры хранения индексов. Если вам необходимо использовать эти версии (например, для требований ЭДО), будьте готовы к «шаманству» с промежуточной конвертацией базы на версии 8.3.21.
Если обновление платформы неизбежно, нам необходимо адаптировать сервер баз данных. Рассмотрим по шагам, какие настройки помогут минимизировать негативный эффект:
Для старых конфигураций крайне важно ограничить уровень параллелизма. Взаимоблокировки часто возникают, когда SQL Server пытается распараллелить тяжелый запрос от 1С. Установим параметр Max Degree of Parallelism:
-- Установка MAXDOP в значение 1 для исключения параллельных планов,
-- вызывающих блокировки в УПП
EXEC sys.sp_configure N'show advanced options', N'1';
RECONFIGURE;
EXEC sys.sp_configure N'max degree of parallelism', N'1';
RECONFIGURE;
Проанализируем ситуацию с планами запросов. Новые версии SQL Server используют современный оценщик стоимости запросов, который иногда ошибается на структурах данных УПП. Мы рекомендуем включить режим совместимости со старым оценщиком в свойствах базы данных (флаг Legacy Cardinality Estimation). Это часто «лечит» внезапные тормоза отчетов, которые раньше летали.
Не забудем про обязательный минимум, который должен выполняться ежедневно. Посмотрим на список необходимых процедур:
-- Пример команды для очистки процедурного кэша при резком падении производительности
DBCC FREEPROCCACHE;
-- Обновление статистики по всей базе данных
EXEC sp_updatestats;
Выясним причину возникновения ошибок SDBL при обмене данными или проведении документов. Часто это связано с тем, что новые платформы более строго проверяют целостность структуры таблиц. Если вы столкнулись с такой проблемой на релизах выше 8.3.22, попробуйте следующее:
РеализацияТоваровУслуг или ТребованиеНакладная).Рассмотрим пример кода для установки управляемой блокировки в модуле объекта при проведении:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ЗаказыПокупателей");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Организация", Организация);
Блокировка.Заблокировать();
Использование таких вставок в критических местах позволит вам стабильно работать даже на самых современных версиях платформы, так как вы явно указываете системе, как управлять транзакцией, не полагаясь на автоматизмы платформы.
Проанализировав текущую ситуацию, мы приходим к следующим выводам. Если ваша цель — максимальная стабильность без лишних трудозатрат, оставайтесь на платформе 8.3.21.1622. Это наиболее сбалансированное решение для УПП в 2024 году.
Если же внешние обстоятельства (требования законодательства, обновление ЭДО) вынуждают вас перейти на 8.3.24/8.3.25, обязательно проведите предварительную настройку SQL Server (MAXDOP, Legacy CE) и будьте готовы к точечной оптимизации кода в местах возникновения блокировок. Помните, что простое наращивание мощностей сервера («железа») редко решает проблемы производительности УПП, так как корень бед обычно кроется в логических ожиданиях и неоптимальных планах запросов в режиме совместимости.