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





Внешняя обработка для быстрой реструктуризации клиент-серверной базы данных.
Способ ускорения реструктуризации — замена таблиц большого объема пустыми копиями перед проведением обновления БД и возврат к исходным таблицам после обновления с предварительной корректировкой их структуры.
Полностью автоматизировано создание и выполнение всех требуемых скриптов SQL. Представлены версии обработки для обычных форм (1С:Предприятие 8.2 (8.2.19.130)) и управляемого приложения (1С:Предприятие 8.3 (8.3.9.1818)).

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

Начиная с платформы версии 8.3.11.2867 1С оптимизировала типовой алгоритм реструктуризации, поэтому разработка наиболее актуальна для более ранних версий 8.3 и 8.2.

О реструктуризации опубликовано достаточно много информации, но все же кратко опишу, что это и в чем проблема. 
Реструктуризация в рамках 1С — это изменение структуры и состава таблиц базы данных и перенос имеющихся данных в изменённые таблицы. Обычно реструктуризация выполняется в тот момент, когда вы нажимаете "Обновить конфигурацию базы данных" в Конфигураторе. 
Основная проблема заключается в том, что при типовой реструктуризации (в платформах до версии 8.3.11.2867) создается пустая таблица новой структуры, в которую копируются данные из исходной таблицы. В случае большого размера исходной таблицы реструктуризация может затянуться на несколько часов, а иногда и дней. При этом БД остается недоступной и повышается риск порчи БД вследствие возможных системных сбоев.

 
Одно из решений — подмена проблемной таблицы пустой копией, обновление базы и приведение структуры исходной таблицы в соответствие с новой структурой таблицы подмены  вручную.
Но этот способ связан с необходимостью выполнения ряда рутинных и достаточно нудных, на мой взгляд, действий:
— анализ объектов реструктуризации в 1С; 
— получение внутренних имен подменяемых таблиц в 1С;
— генерация скриптов сознания копий подменяемых таблиц в ms management studio;
— создание копий и подмена исходных таблиц в ms management studio;
— обновление базы в 1С; 
— анализ новой структуры таблиц подмены в ms management studio; 
— подготовка скриптов корректировки структуры исходных таблиц, либо корректировка исходных таблиц в форме мастера в ms management studio;
— подмена пустых копий исходными таблицами в ms management studio;
— удаление пустых копий ms management studio;

Представленная обработка полностью автоматизирует действия до и после обновления базы в 1С.

Ограничения: доступна быстрая реструктуризация только таблиц журналов, документов, справочников и регистров сведений. Обработка не предназначена для ускорения реструктуризации при расширении ссылочного типа до составного ссылочного. Обработка только для клиент-серверных баз 1С, для использования необходим доступ к серверу SQL с правом создания и изменения объектов

Порядок проведения быстрой реструктуризации с помощью обработки "БыстроеОбновлениеБД.epf":

1. Заблокируйте доступ к обновляемой БД.
2. Выполните монопольный вход в программу и запустите обработку "БыстроеОбновлениеБД.epf".
3. Убедитесь в наличии актуальной копии БД с помощью команды "Получить дату последней резервной копии".
4. Выберите в списке объекты, которые необходимо обновить с подменой таблиц.
5. Выполните команду "Подготовить базу к реструктуризации".
6. Закройте монопольную сессию;
7. Выполните обновление БД в конфигураторе.
8. Выполните монопольный вход в программу и запустите обработку "БыстроеОбновлениеБД.epf".
9. Выполните команду "Завершить реструктуризацию".
10. Разблокируйте доступ к обновляемой БД — база готова к работе.

Результаты выполнения всех команд отображаются в поле "Журнал выполнения".

Дополнительные команды обработки:
"Анализ выбранных/подмененных таблиц" — выводит в поле журнала информацию о размере выбранных объектов:

"Показать скрипт подмены таблиц" — выводит в поле журнала текст скрипта SQL для подмены рабочих таблиц пустыми копиями:

"Отмена: откат к исходному состоянию" — команда возвращает базу в состояние до подмены таблиц, пустые копии удаляются; 
"Анализ изменения структуры таблиц после обновления базы" — выводит в поле журнала информацию о изменениях внутренней структуры выбранных объектов после обновления конфигурации БД:

 
"Показать скрипт завершения реструктуризации" — выводит в поле журнала текст скрипта SQL для корректировки структуры исходных таблиц и обратной подмены:

В завершение, обращаю внимание, что данный метод осуществляет изменение структуры данных не типовыми средствами. Используйте его в крайнем случае, когда очень нужно, а по-другому никак. Рекомендую предварительный проверочный запуск  реструктуризации с использованием представленной обработки в тестовой базе. И обязательно убедитесь в наличии актуальной резервной копии обновляемой БД.   

Всем удачи!

33 Comments

  1. nomad_irk

    Типовой механизм, в последних версиях платформы, вроде же в этом смысле оптимизировали, не?

    Reply
  2. dmitrydemenew

    (2)я отметил это в тексте публикации. Публикация адресована в большей степени тем, кто реально сталкивается с описанной проблемой.

    Reply
  3. Rustig

    (1) не вижу проблемы: пункт 65 и предложенная идея не связаны друг с другом.

    да и вообще, относитесь к этим пунктам с долей критичности, а не к реально действующему механизму.

    поясню: некоторые пункты технически не реализованы, но прописаны. К примеру, при установке доп.лицензии платформа ее определяет как полноценную лицензию и не различает, что основной лицензии нет в локальной сети. То есть на второй компьютер ставите доп.лицензию, и платформа+конфигурация запустится, не проверив наличие лицензии основной поставки.

    Reply
  4. Rustig

    (2) » в последних версиях платформы»? интересно посмотреть на человека, который работает с последними версиями платформы. Я так привык, что последнюю версию на сегодняшний день я начинаю тестить не ранее чем через год-два…. и то благодаря типовой БП 3.0, и то «не испытываю», а просто ставлю…

    Reply
  5. Rustig

    (3) да, интересная идея и реализация!

    Reply
  6. nomad_irk

    (5) 8.3.11.2867 когда вышла?

    Да и работая c ERP 2.4/БУХ 3/ЗУП 3/УТ11/Розница 2.2 требования к наличию «свежей» версии платформы жесткие.

    Reply
  7. Rustig

    (7) при чем здесь 8.3.11?

    вы написали «последние версии платформы» — последняя на сегодня 8.3.15.1747.

    Reply
  8. nomad_irk

    (8)При том, что 1с оптимизировала процесс реструктуризации в этой версии.

    Reply
  9. Rustig

    (9) ок.

    Reply
  10. buganov

    (1) там же:

    Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии «1С:Предприятия».
    Reply
  11. buganov

    (2) Попробуйте таблицу в 100Гб реструктуризировать. Отпишитесь, как пройдет

    Reply
  12. Bassgood

    (4)

    пункт 65 и предложенная идея не связаны друг с другом.

    Ну как же не связаны, если в явном виде написано, что нельзя обращаться к данным таблиц СУБД и их структурам прямыми запросами и необходимо использовать только штатные средства платформы 1С, лукавите 😉

    Reply
  13. zeegin

    (11) Вы между строк читаете?

    Читая и изменяя таблицы СУБД напрямую тот, кто использует сей механизм нарушает лицензионное соглашение. Об этом как минимум надо предупреждать, чтобы те, кто не хочет, чтобы 1С отказалась от поддержки их компаний при их следующем обращении в саппорт, подумали, перед тем как использовать такие манипуляции.

    Хотите быструю реструктуризацию средствами СУБД? Перейдите на последнюю версию платформы и настройте. https://wonderland.v8.1c.ru/blog/optimizatsiya-restrukturizatsii-bazy-dannykh/

    Reply
  14. buganov

    (14)

    1. Вы обращались в саппорт 1С? Если да, то как часто и по каким вопросам? И каков результат?

    2. Чем плоха реструктуризация средствами SQL, если после нее все работает?

    3. Вы пробовали большие таблицы(>50Гб хотя бы) реструктуризировать новым механизмом? Думаю, что нет.

    Представьте себе компанию, которая работает 24/7 и как Вы думаете, позволит бизнес технологическое окно часов в 8? Сколько будет стоить такое окно?

    И да, судя по отзывам коллег, которые пробовали новый механизм, остались недовольны. Приплюсуйте сюда стоимость потери базы и восстановления ее из бэкапа

    Reply
  15. dmitrydemenew

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

    Reply
  16. zeegin

    (15)

    1. Конечно. Крайне положительно. Особенно КОРП поддержка.

    2. Работает и работает с гарантией вендора — это разные вещи.

    3. Конечно, в т.ч. террабайтные базы.

    4. 8 часов — это очень много. Фоновая реструктуризация столько не требует, потому что на то она и фоновая, что не прерывает работу пользователей в процессе реструктуризации базы. См. документацию https://its.1c.ru/db/v8316doc#bookmark:dev:TI000000063

    Фоновая реструктуризация выполняется в несколько фаз:

    1. Фаза обработки (пользователи могут работать с информационной базой)

    2. Фаза актуализации (пользователи могут работать с информационной базой)

    3. Фаза принятия изменений (пользователи не могут работать с информационной базой)

    Фоновое обновление может выполняться с закрытым конфигуратором.

    Можно даже сервер погасить и поставить обновление на паузу, а потом продолжить.

    Reply
  17. buganov

    (17)Хочется верить, но почему то не покидает ощущение, что Вы теоретик.

    Особенно: «Крайне положительно»

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

    Ну да ладно, спор бесполезен, удачи и целых таблиц.

    Reply
  18. bulpi

    (18)

    Я так понял, автор (17) — работник техподдержки 🙂

    Reply
  19. zeegin

    (19) А вы пробовали выключить и снова включить? 🙂

    Reply
  20. starik-2005

    Фоновая реструктуризация в старых версиях платформы часто (более одного раза точно) приводила к очистке таблиц. Вот была таблица с примерно лярдом файлов (может даже два лярда — да, и такое бывает), а потом она внезапно оказалась пустой. Реструктуризация этого всего (файлы не хранятся в базе — они отдельно, а реструктуризация из-за того, что тип владельца меняется — новый справочник появился или документ, к которому можно крепить файлы) — две недели. Что он там делает — хрен положить, но для бизнеса, который работает 24/7 на 1С (да, это ошибка — ежу понятно) ждать доступность таблицы с файлами в районе 2-х недель — это как-то бредово звучит, ч учетом того, что абсолютно ничего не меняется в таблице — тупая 1С читает, удаляет и записывает ровно одно и то же.

    Так вот после такого ни один здоровый умственно человек не будет даже смотреть в сторону идиотского 65-го пункта соглашения с непонятно какими санкциями, а просто возьмет и сделает как настоящий мужик — переименует таблицу, создаст пустую, запустит реструктуризацию, после чего переименует таблицу назад.

    То, что 1С-неги в последних версиях платформы с этим что-то сделали — это радует. Давно пора.

    Reply
  21. buganov

    (21) и документы гораздо прогнозируемее реструктуризировать отбросив табличные части. Никогда не понимал фишки, зачем трогать табличные части, если изменения только в шапке

    Reply
  22. starik-2005

    (22) это не в понимании дело — это в трактовке согласованности из ACID: читаем объекты целиком, меняем из в соответствии со схемой миграции (изменений) и записываем целиком в транзакции взад. Но, видимо, прхитехтор букву закона про согласованность выучил, тест сдал, а подумать забыл — вот и реализуется подобная схема целиком (чтобы не нарушать отчетности принципа ACID). Думать на курсах, к сожалению не учат.

    Reply
  23. Rustig

    (13) идея предложенного метода заключена в том, чтобы делать копию типовых таблиц, например, типовой таблицы «Файлы». Типовую таблицу «Файлы» после копирования в другую таблицу надо очистить, чтобы она осталась пустой.

    Далее провести обновление и далее скопировать (вернуть) данные в типовую таблицу.

    Это вот такая идея.

    Сама идея никаких правил лицензирования не нарушает.

    А вот способы реализации — пусть каждый сам выбирает — на свой страх и риск поломать базу — тут фирма -разработчик ответственности не несет и предупреждает, что все что не документировано, то использовать нельзя.

    Уж не знаю какие мотивы были так написать: то ли перестраховать себя от нежелательных возможных дальнейших разбирательств со стороны клиентов, то ли реально будут наказывать (хотя это процессуально сделать не реально)…

    Относитесь к этим пунктам лицензирования критично — то есть с долей скепсиса, а вот к проблемам обновления из-за подобных типовых таблиц «Файлы», когда они наполнены данными — более серьезно. Я сталкивался с подобным. Но только с файловой базой.

    Reply
  24. Rustig

    (17) хорошо, что мнения разные. картина мира тоже у всех своя. напишите, пож-та , в каком городе вы работаете, какие конфигурации на ИТС-сопровождении? Какой франчайзи 1с вас обслуживает?

    Reply
  25. KAPACEB.AA

    (17) К сожалению, на собственном опыте сталкивался с нестабильной работой фонового обновления (8.3.13).

    Думаю, ещё сыроват механизм…

    Reply
  26. Bassgood

    (24) Ну Вы же понимаете, что очистка и копирование данных в таблицы — это чтение и изменение данных таблиц БД, о которых и идет речь в этом пункте лицензирования, поэтому это есть нарушение этих правил, но я ни в коем случае не говорю о том, что их следует придерживаться в убыток бизнесу или же тем более в случае отсутствия какого-либо другого альтернативного решения возникшей проблемы, приводящей к невозможности нормального ведения бизнеса.

    Reply
  27. Rustig

    (27) в пункте написано хитро «что не задокументировано, то использовать нельзя»…

    есть пункты (про доп.лицензии например), которые задокументированы, но на уровне платформы технически не доработаны…

    значит ли это, что остальные пункты (в том числе ваш) утрачивают силу?

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

    и тогда можно будет использовать …. так может и сейчас можно?!

    Reply
  28. Bassgood

    (28) Там написано не хитро, а довольно прямо указано следующим текстом:

    Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными «1С:Предприятия», например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД.

    То бишь работать с ИБ 1С при помощи прямых SQL-запросов правилами запрещается, другое дело на сколько эти правила соответствуют реалиям

    и тогда можно будет использовать …. так может и сейчас можно?!

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

    Reply
  29. Rustig

    (29)ок.

    Reply
  30. imh9305

    (18),(19) представьте себе, что автор (17) — до недавнего времени один из разработчиков БСП и умеет не только в 1С.

    Reply
  31. buganov

    (31) Причем тут БСП? Вы знаете что такое реструктуризация и для чего она нужна? Реструктуризация в штатном варианте делается средствами платформы.

    Reply
  32. imh9305

    (32) знаю. навряд ли разработчик бсп этого не знает)

    Reply
  33. buganov

    (33)только вот разработчик платформы может и не знать БСП. Да и я так и не понял, причем тут БСП? При обновлении/реструктуризации код 1С вообще не исполняется. Работают только платформенные механизмы, которые шлют СУБД запросы для изменения структуры таблиц

    Reply

Leave a Comment

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