При переходе со старых редакций конфигураций на новые (например, при масштабном обновлении «Бухгалтерии предприятия 2.0» на редакцию 3.0) перед ИТ-специалистами часто встает вопрос выбора версии платформы «1С:Предприятие». Иногда среди системных администраторов возникает гипотеза: если выполнить сам процесс обновления на более старой версии платформы (например, 8.3.10), а затем запустить готовую базу на актуальной версии (например, 8.3.12), то такая база будет работать быстрее, чем если бы обновление сразу выполнялось на новой платформе.
В этой статье мы подробно разберем, как платформа 1С управляет структурой баз данных СУБД, как работают механизмы реструктуризации, и действительно ли версия платформы в момент обновления влияет на последующую производительность системы. Мы проанализируем внутреннее устройство платформы и составим пошаговый план для получения максимально быстрой и стабильной информационной базы после перехода.
Для начала проанализируем, от чего вообще зависит физическая структура таблиц в СУБД (MS SQL Server, PostgreSQL, IBM DB2 или Oracle Database) при работе с «1С:Предприятием». Логическая структура базы данных описывается метаданными конфигурации (справочники, документы, регистры, их реквизиты и табличные части). Физическая же структура (имена таблиц вида _ReferenceXX, типы колонок, наличие индексов) формируется платформой на основе двух ключевых параметров:
8.3.12 СУБД будет использовать правила построения запросов и таблиц, характерные для версии 8.3.10.Когда мы выполняем первый запуск базы данных под более новой версией платформы, система автоматически производит низкоуровневую конвертацию своих служебных таблиц (хранящих конфигурацию, настройки пользователей, параметры сеансов и т.д.) под требования текущего релиза платформы.
Таким образом, в конечном итоге базы будут абсолютно идентичны по структуре таблиц, независимо от того, под какой именно версией платформы выполнялось промежуточное обновление конфигурации, если в результате обе базы запущены под одной и той же версией платформы с одинаковым режимом совместимости конфигурации.
Рассмотрим подробнее важную технологическую особенность платформ «1С:Предприятие», начиная с версии 8.3.11. В этой версии разработчики 1С кардинально переработали внутренний механизм реструктуризации баз данных.
Выясним причину разницы между старым и новым механизмами:
ALTER TABLE). Построчное копирование данных сервером 1С исключено там, где это возможно. Это позволило ускорить процесс обновления структуры базы данных в разы (а на некоторых операциях — в десятки раз).Отсюда следует важный практический вывод: обновление конфигурации под управлением новой платформы (например, 8.3.12) пройдет значительно быстрее, чем под управлением старой 8.3.10, именно благодаря оптимизированному механизму реструктуризации версии v2. Конечный же физический вид таблиц после завершения реструктуризации будет одинаковым в обоих случаях.
Почему же у некоторых специалистов (включая системных администраторов) возникает ощущение, что база, обновленная под старой платформой, работает быстрее? Проанализируем ситуацию и выявим реальные причины замедления работы базы сразу после масштабного обновления (например, перехода с редакции 2.0 на 3.0):
Следовательно, миф о превосходстве старой платформы при обновлении несостоятелен. Медленная работа обусловлена исключительно фоновыми процессами прикладного решения и отсутствием регламентного обслуживания СУБД после завершения перехода.
Чтобы гарантировать идеальную чистоту структуры базы данных, отсутствие логических ошибок и максимальное быстродействие, выполним переход по следующему проверенному алгоритму.
Установим на сервер приложений 1С актуальную рекомендованную версию платформы (например, 8.3.12 или выше). Выполнять переход на устаревших версиях платформы крайне не рекомендуется из-за отсутствия оптимизаций работы с памятью и СУБД.
Запустим процесс обновления конфигурации БП 2.0 до редакции 3.0 под управлением новой платформы. Платформа задействует быстрый механизм реструктуризации v2, что существенно сэкономит время проведения работ.
Для того чтобы полностью исключить физическую фрагментацию таблиц на уровне СУБД, очистить базу от временного «мусора», оставшегося после тяжелого процесса реструктуризации, и пересоздать все индексы СУБД с нуля по оптимальным алгоритмам новой платформы, выполним процедуру пересоздания базы через файл выгрузки:
.dt..dt.При загрузке файла .dt платформа 1С заново генерирует физическую структуру таблиц в базе данных СУБД под управлением текущей версии платформы, обеспечивая её идеальное состояние.
Запустим базу в пользовательском режиме и дождемся завершения всех отложенных обработчиков обновления БСП (за их состоянием можно следить через форму «Результаты обновления программы»). После этого отключим неиспользуемые регламентные задания, которые создают лишнюю фоновую нагрузку.
Для программного управления регламентными заданиями мы можем использовать следующий код на языке 1С. Рассмотрим пример, как можно быстро отключить все регламентные задания, за исключением критически важных:
ВыборкаЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого ТекущееЗадание Из ВыборкаЗаданий Цикл
// Отключим, например, полнотекстовый поиск и извлечение текста, если они не используются
Если Найти(ТекущееЗадание.Метаданные.Имя, "ПолнотекстовыйПоиск") > 0
Или Найти(ТекущееЗадание.Метаданные.Имя, "ИзвлечениеТекста") > 0 Тогда
Попытка
ТекущееЗадание.Использование = Ложь;
ТекущееЗадание.Записать();
ЗаписьЖурналаРегистрации("Оптимизация", УровеньЖурналаРегистрации.Информация, , ,
"Отключено регламентное задание: " + ТекущееЗадание.Метаданные.Синоним);
Исключение
ЗаписьЖурналаРегистрации("Оптимизация", УровеньЖурналаРегистрации.Ошибка, , ,
"Не удалось отключить задание: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецЦикла;
После того как база данных полностью развернута и все фоновые обработчики обновления завершили свою работу, критически важно выполнить регламентные процедуры на сервере СУБД:
Выполнение этих шагов гарантирует, что ваша информационная база будет работать с максимальной производительностью, полностью соответствующей возможностям вашего серверного оборудования.