Реструктуризация базы 1с что означает
Перейти к содержимому

Реструктуризация базы 1с что означает

  • автор:

Реструктуризация базы 1с что означает

Реструктуризация — грозное оружие в борьбе с ошибками в базе. Что это такое? Если по-простому: это когда для каждой таблицы в базе создается новая с такой же структурой (согласно метаданным) и информация из старой последовательно копируется в новую.

Сразу скажу процесс этот долгий. В некоторых случаях действительно помогает. Создание резервной копии перед реструктуризацией обязательно.

Сам процесс реструктуризации по шагам описан в данной статье (ссылка)

Про резервные копии здесь.

И ещё, если не помогла реструктуризация, попробуйте сделать исправление физической целостности базы при помощи вот этой утилиты.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Оптимизация реструктуризации базы данных

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.11.2867.

Мы разработали новый механизм реструктуризации базы данных, который позволяет ускорить обновление конфигурации в среднем в 3-4 раза, а в отдельных случаях на порядки. Ускорение достигается за счёт минимизации манипуляций над данными и максимального их переноса на уровень системы управления базой данных (СУБД).

Что такое реструктуризация?

Реструктуризация это изменение структуры и состава таблиц базы данных, и перенос имеющихся данных в изменённые таблицы. Обычно реструктуризация выполняется в тот момент, когда вы нажимаете Обновить конфигурацию базы данных в Конфигураторе. Но выполняется она не каждый раз.

Реструктуризация выполняется тогда, когда изменения конфигурации требуют появления новых колонок или таблиц в базе, или когда меняется тип существующей колонки. Например, вы добавили реквизит к справочнику, добавили документ, или изменили тип имеющегося реквизита с Число на Строка. В этих случаях потребуется реструктуризация.

Если рассматривать реструктуризацию с точки зрения манипулирования данными, то существует база данных и схема данных, которая соответствует конфигурации базы данных. После того, как вы обновляете конфигурацию базы данных, создаются новые структуры данных, в которые переносятся старые данные.

01.png

«Традиционная» реструктуризация

В процессе реструктуризации последовательно анализируются все объекты конфигурации. Не углубляясь в подробности можно сказать, что для каждого объекта выполняется:

  • Анализ его изменений;
  • Создание новых таблиц в базе данных, которые соответствуют новой структуре объекта;
  • Перенос данных.

Из этих трёх шагов перенос данных занимает наибольшее количество времени. При этом сами операции переноса данных могут быть простыми и сложными.

Например, к простым и быстрым операциям относятся те, которые вызваны добавлением или удалением столбцов таблицы. В этом случае отдельным запросом создаётся новая таблица (с изменённой структурой) и данные переносятся в неё.

02.png

Все остальные операции являются сложными, могут занимать длительное время, и для их выполнения требуется участие Конфигуратора (или серверной части платформы, если обновление выполняется на сервере). Потому что процесс переноса данных может сопровождаться различными вспомогательными действиями, обусловленными спецификой 1С:Предприятия.

03.png

Например, может потребоваться удаление ссылок на несуществующие объекты, изменение предопределённых данных, предварительная фильтрация данных (для удаления движений, соответствующих удаляемым регистраторам), проверка уникальности номеров и кодов, проверка количества уровней вложенности справочника и корректности его иерархии, и другие.

Новый механизм реструктуризации

Главное изменение заключается в том, что оптимизация реструктуризации достигнута не за счёт локальных изменений «традиционного» механизма, а за счёт создания полностью нового механизма реструктуризации.

Это непростая и трудоёмкая задача, потому что механизм реструктуризации должен обеспечивать транзакционность изменений, то есть надежность и целостность базы данных во всех случаях. Механизм должен быть готов к тому, что процесс реструктуризации может прерваться в любой момент (в результате сбоя, например), и при этом система должна остаться в консистентном состоянии. То есть либо в виде старой версии, либо в виде новой версии. Старый механизм для этого создавал новые версии изменённых таблиц, и заполнял их. А потом подменял все старые версии на новые.

Новый механизм тоже обеспечивает транзакционность, но более сложным способом.

Кроме этого новый механизм основан на ряде идей, которые позволили получить значительное ускорение:

  • Максимальное количество операций делегируется на уровень СУБД, потому что это наиболее близкая к данным часть, и она имеет большие возможности изменения данных.
  • Обрабатываются только те таблицы СУБД, в которых изменения конфигурации могут вызвать изменение данных. В «традиционном» механизме это было не всегда так. Например, при изменении реквизита табличной части документа копировались данные и основной таблицы, и всех табличных частей документа.
  • Табличные части реструктуризируются отдельно. При этом возможно отдельное «пореквизитное» их изменение. Например, если вы добавили реквизит к табличной части, то к таблице просто добавляется новый столбец, без модификации основной таблицы.

04.png

На основе этих идей мы достигли максимальной оптимизации на тех изменениях конфигурации, которые приводят к следующим операциям с данными:

  • Добавление или удаление столбцов таблиц. Эти операции проводятся теперь на текущих таблицах (раньше создавались новые таблицы и в них переносились данные). Необходимость добавления или удаления столбцов возникает, например, при добавлении или удалении реквизитов, при изменении некоторых свойств объекта конфигурации (иерархия справочника и столбец _ParentID) и др.
  • Добавление или удаление индексов. Просто создаётся новый индекс, без создания новых таблиц и переноса данных. Эти операции выполняются, если вы установили индексирование у реквизита, например.
  • Изменение существующих индексов. Также выполняется без создания таблиц и переноса данных. Например, кластерный индекс регистра сведений меняется тогда, когда вы добавляете измерение.

В других операциях перенос данных требуется как и раньше, но практически всегда (в большей части операций) он осуществляется на уровне СУБД. Данные переносятся единым запросом. Это может быть INSERT для новых таблиц, или UPDATE существующих таблиц.

Конечно, существуют такие изменения, которые всё равно проходят обработку на сервере с выгрузкой данных построчно. Например, преобразование строки в число, или в дату. Такие операции нецелесообразно делать на уровне СУБД, к тому же они довольно редко встречаются. Но наиболее частые изменения проводятся всё же на уровне СУБД, одним запросом на одну таблицу.

В среднем ускорение достигает 4 раз. Это, конечно, зависит от конкретной конфигурации, от конкретных изменений, и даже конкретных данных. В отдельных случаях ускорение может быть до 20 раз. Такое возможно, например, при удалении реквизита в большой таблице, или если изменения затрагивают маленькие таблицы, но сам объект при этом является довольно большим.

Помимо ускорения есть и другой положительный момент. Во многих случаях не перестраиваются индексы. Это позволяет сохранить их актуальность, сохранить статистику, сократить место, требуемое для реструктуризации.

Мы провели несколько сравнительных экспериментов на реальных информационных базах, и получили следующие результаты:

  • Добавление реквизитов к документам и измерений к регистрам сведений. База 400 Гб. Новый механизм позволяет ускорить реструктуризацию с 2 часов до 15 минут.
  • Изменение режима совместимости с 8.2.19 на 8.3.6. База 6 Тб. Ускорение с 5 дней до 12 часов.

Особенности текущей реализации

Новый механизм реструктуризации мы планируем включить в версию 8.3.11 в статусе бета. Он реализован только на сервере, причём на сервере должна быть установлена Java 8.

Чтобы использовать новый механизм реструктуризации, вы можете запустить Конфигуратор в пакетном режиме. Кроме этого в файле conf.cfg вы также можете указать необходимость использования нового механизма. Тогда новая реструктуризация будет выполняться при нажатии КонфигурацияКонфигурация базы данныхОбновить конфигурацию базы данных на сервере. Если никаких специальных действий не предпринимать (просто установить новую платформу), то стандартно будет использоваться старый механизм.

Пока поддерживаются только две СУБД: MS SQL Server и PostgreSQL.

На текущий момент мы оптимизировали реструктуризацию не всех объектов конфигурации, а только основных:

  • Планов обмена,
  • Справочников,
  • Документов,
  • Журналов документов,
  • Планов видов характеристик,
  • Планов счетов,
  • Регистров сведений,
  • Регистров накопления,
  • Регистров бухгалтерии.

Для перечисленных объектов (кроме регистров) оптимизированы любые их изменения. Для регистров мы оптимизировали реструктуризацию движений и реструктуризацию таблиц регистрации изменений. Операции пересчёта итогов и пересчёта срезов для регистра сведений мы пока не оптимизировали. Однако, несмотря на это, использование нового механизма уже даёт существенное ускорение всего обновления регистров в целом.

Мы рассматриваем возможность увеличения охвата операций и расширения состава объектов конфигурации, реструктуризация которых оптимизирована в новом механизме.

Что такое реструктуризация (реиндексация)?

Реиндексация подразумевает перестроение индексов для заданных таблиц. Данная операция повышает производительность программы. Обычно операция запускается при восстановлении поврежденной базы или во время тестирования и исправления информационной базы.

Реиндексация подразумевает перестроение индексов для заданных таблиц. Данная операция повышает производительность программы. Обычно операция запускается при восстановлении поврежденной базы или во время тестирования и исправления информационной базы.

Реструктуризация базы 1с что означает

сабж.
Этот пункт есть в Тестировании и исправлении базы. Кроме то это происходит при объединении конфигураций.
Что то очень туманный смысл для меня. Поясните плиз.

в SQL (ну и не в SQL) есть таблицы. у таблиц есть поля и структура., вот создал ты новое поле а таблица то и не знает. вот как то так =)

Ну и при переходе с 8.0 в 8.1 структура таблиц поменялась

я не в sql а в файловой базе.
Можно поподробнее — зачем например в ТИС это еть
(1)
Один фиг.
Для перехода с 8.0 в 8.1 . структура таблиц поменялась.
(2) Если файловый,используется не сторонняя СУБД, а своя, там тоже есть и таблицы и структура их

(3)Я никуда не переходил. Просто запускаю ТИС и там есть пункт реструктуризация таблиц БД.
Вот и интересно — для чего он

вот оно, поколение пепси, которое пришло сразу в 1С )
(5) Упс. Пошарился в ТИС. И где там реструктуризация?
(7) ТИИ — Тестирование и исправление
(8) есть такая галка. 1С 8.1.
(8) Та ну? А там хде?

а вот мне интересно, какого фига идет реструктуризация, если добавить предопределенный реквизит. особенно тоска, когда добавляешь его в справочник с 100000 элементами

(5)
Есть таблицы, у них есть структура.
Если хошь её переделать ставь пункт.
Он её разберёт и соберёт заново.

Но если ты некуда не переходишь то тебе это не надо.
(Ну может она структура поломается (хотя я такого не видел) можно запустить реструктуризацию и она восстоновится)

в 8.1 не с первой версии. гдето после 8.1.10, точно не помню

(12) ну, надеюсь, ты понимаешь, что даже если взять простой файл данных, то там записи — определенной длины, равные суммарной длине полей.
в базаз все сложнее, но смысл примерно тот же.

(15) и что, от добавления предопределенного элемента меняется длина полей?

поясню почему меня этот вопрос интересует. При реструктуризации выдается критическая ошибка «Произошла критическая ошибка. Запись значения NULL в поле не допускающее NULL _FLD6852_TYPE»

И меня вот и интересует механизм что происходит физически с базой.
Как я понял — толком никто не знает

(16) нет, конечно. это другой случай: база еще не знает до обновления про его. а как это назвали.. какая разница?

(0) Поиском на форуме пользоваться умеешь? Уже неоднократно отвечали. И про реструктуризацию, и когда она необходима.

Источник: V8Update.htm :
«. Произведена оптимизация структуры таблиц и индексов базы данных. Для получения эффекта от произведенной оптимизации необходимо выполнить полную реструктуризацию информационной базы. «

По поводу локализации ошибки:

Данные=ПолучитьСтруктуруХраненияБазыДанных(,Истина);
Состояние(«Ищу. «);
ИмяПоляХранения=Врег(«_FLD6852_TYPE»);

Выход=Ложь;
Для Каждого СтрДанные Из Данные Цикл
_Метаданные=СтрДанные.Метаданные;
Для Каждого Поле Из СтрДанные.Поля Цикл
_ИмяПоляХранения=Поле.ИмяПоляХранения;
Если Врег(_ИмяПоляХранения)=ИмяПоляХранения Тогда
Выход=Истина;
Сообщить(«Метаданные:»+_Метаданные+» Реквизит:»+Поле.ИмяПоля);
Прервать;
КонецЕсли;
КонецЦикла;
Если Выход Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *