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

05.11.19

База данных - HighLoad оптимизация

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

Скачать файлы

Наименование Файл Версия Размер
Быстрая реструктуризация базы данных УФ(83)
.epf 24,72Kb
115
.epf 24,72Kb 115 Скачать
Быстрая реструктуризация обычные формы (82)
.epf 23,59Kb
71
.epf 23,59Kb 71 Скачать

Наверное, каждый специалист, обслуживающий систему на платформе 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 для корректировки структуры исходных таблиц и обратной подмены:

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

Всем удачи!

Реструктуризация оптимизация ускорение SQL

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    2973    spyke    26    

42

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5105    vasilev2015    19    

37

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7632    158    ZAOSTG    67    

96

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

09.01.2024    5975    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8862    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

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

15.11.2023    5104    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16181    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. zeegin 114 05.11.19 16:46 Сейчас в теме
4. RustIG 1351 06.11.19 07:05 Сейчас в теме
(1) не вижу проблемы: пункт 65 и предложенная идея не связаны друг с другом.
да и вообще, относитесь к этим пунктам с долей критичности, а не к реально действующему механизму.
поясню: некоторые пункты технически не реализованы, но прописаны. К примеру, при установке доп.лицензии платформа ее определяет как полноценную лицензию и не различает, что основной лицензии нет в локальной сети. То есть на второй компьютер ставите доп.лицензию, и платформа+конфигурация запустится, не проверив наличие лицензии основной поставки.
Fox-trot; +1 Ответить
13. Bassgood 1425 06.11.19 10:00 Сейчас в теме
(4)
пункт 65 и предложенная идея не связаны друг с другом.

Ну как же не связаны, если в явном виде написано, что нельзя обращаться к данным таблиц СУБД и их структурам прямыми запросами и необходимо использовать только штатные средства платформы 1С, лукавите ;)
24. RustIG 1351 07.11.19 11:07 Сейчас в теме
(13) идея предложенного метода заключена в том, чтобы делать копию типовых таблиц, например, типовой таблицы "Файлы". Типовую таблицу "Файлы" после копирования в другую таблицу надо очистить, чтобы она осталась пустой.
Далее провести обновление и далее скопировать (вернуть) данные в типовую таблицу.
Это вот такая идея.
Сама идея никаких правил лицензирования не нарушает.

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

Относитесь к этим пунктам лицензирования критично - то есть с долей скепсиса, а вот к проблемам обновления из-за подобных типовых таблиц "Файлы", когда они наполнены данными - более серьезно. Я сталкивался с подобным. Но только с файловой базой.
Fox-trot; +1 Ответить
27. Bassgood 1425 07.11.19 13:27 Сейчас в теме
(24) Ну Вы же понимаете, что очистка и копирование данных в таблицы - это чтение и изменение данных таблиц БД, о которых и идет речь в этом пункте лицензирования, поэтому это есть нарушение этих правил, но я ни в коем случае не говорю о том, что их следует придерживаться в убыток бизнесу или же тем более в случае отсутствия какого-либо другого альтернативного решения возникшей проблемы, приводящей к невозможности нормального ведения бизнеса.
Fox-trot; +1 Ответить
28. RustIG 1351 07.11.19 15:11 Сейчас в теме
(27) в пункте написано хитро "что не задокументировано, то использовать нельзя"...
есть пункты (про доп.лицензии например), которые задокументированы, но на уровне платформы технически не доработаны...
значит ли это, что остальные пункты (в том числе ваш) утрачивают силу?

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

и тогда можно будет использовать .... так может и сейчас можно?!
29. Bassgood 1425 07.11.19 17:20 Сейчас в теме
(28) Там написано не хитро, а довольно прямо указано следующим текстом:
Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными "1С:Предприятия", например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД.

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

Можно и сейчас использовать, только не факт, что это использование в будущем не приведет к негативным последствиям, допустим, при переходе на новую версию платформы или изменений в используемых конфигурациях
30. RustIG 1351 07.11.19 22:47 Сейчас в теме
11. buganov 200 06.11.19 09:56 Сейчас в теме
(1) там же:
Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".
14. zeegin 114 06.11.19 10:03 Сейчас в теме
(11) Вы между строк читаете?
Читая и изменяя таблицы СУБД напрямую тот, кто использует сей механизм нарушает лицензионное соглашение. Об этом как минимум надо предупреждать, чтобы те, кто не хочет, чтобы 1С отказалась от поддержки их компаний при их следующем обращении в саппорт, подумали, перед тем как использовать такие манипуляции.

Хотите быструю реструктуризацию средствами СУБД? Перейдите на последнюю версию платформы и настройте. https://wonderland.v8.1c.ru/blog/optimizatsiya-restrukturizatsii-bazy-dannykh/
sapervodichka; +1 4 Ответить
15. buganov 200 06.11.19 10:54 Сейчас в теме
(14)
1. Вы обращались в саппорт 1С? Если да, то как часто и по каким вопросам? И каков результат?
2. Чем плоха реструктуризация средствами SQL, если после нее все работает?
3. Вы пробовали большие таблицы(>50Гб хотя бы) реструктуризировать новым механизмом? Думаю, что нет.

Представьте себе компанию, которая работает 24/7 и как Вы думаете, позволит бизнес технологическое окно часов в 8? Сколько будет стоить такое окно?
И да, судя по отзывам коллег, которые пробовали новый механизм, остались недовольны. Приплюсуйте сюда стоимость потери базы и восстановления ее из бэкапа
lengli; Altez; SeiOkami; Fox-trot; GetNight; zhichkin; Award; bulpi; bug256; +9 Ответить
17. zeegin 114 06.11.19 11:19 Сейчас в теме
(15)
1. Конечно. Крайне положительно. Особенно КОРП поддержка.
2. Работает и работает с гарантией вендора - это разные вещи.
3. Конечно, в т.ч. террабайтные базы.
4. 8 часов - это очень много. Фоновая реструктуризация столько не требует, потому что на то она и фоновая, что не прерывает работу пользователей в процессе реструктуризации базы. См. документацию https://its.1c.ru/db/v8316doc#bookmark:dev:TI000000063

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

Фоновое обновление может выполняться с закрытым конфигуратором.
Можно даже сервер погасить и поставить обновление на паузу, а потом продолжить.
theshadowco; +1 2 Ответить
18. buganov 200 06.11.19 11:48 Сейчас в теме
(17)Хочется верить, но почему то не покидает ощущение, что Вы теоретик.
Особенно: "Крайне положительно"
И особенно, что Вы реструктуризировали не только большие базы, но в первую очередь большие таблицы новой методикой. Вот коллеги мне рассказали, что новые веяния крайне сырые. И я им верю, потому что а) обманывать им незачем б) мы периодически обмениваемся новыми знаниями

Ну да ладно, спор бесполезен, удачи и целых таблиц.
Fox-trot; +1 Ответить
19. bulpi 215 06.11.19 14:58 Сейчас в теме
(18)
Я так понял, автор (17) - работник техподдержки :)
20. zeegin 114 06.11.19 15:14 Сейчас в теме
(19) А вы пробовали выключить и снова включить? :)
31. ip0593 20 17.11.19 11:15 Сейчас в теме
(18),(19) представьте себе, что автор (17) - до недавнего времени один из разработчиков БСП и умеет не только в 1С.
32. buganov 200 18.11.19 05:44 Сейчас в теме
(31) Причем тут БСП? Вы знаете что такое реструктуризация и для чего она нужна? Реструктуризация в штатном варианте делается средствами платформы.
33. ip0593 20 18.11.19 09:22 Сейчас в теме
(32) знаю. навряд ли разработчик бсп этого не знает)
34. buganov 200 18.11.19 11:35 Сейчас в теме
(33)только вот разработчик платформы может и не знать БСП. Да и я так и не понял, причем тут БСП? При обновлении/реструктуризации код 1С вообще не исполняется. Работают только платформенные механизмы, которые шлют СУБД запросы для изменения структуры таблиц
25. RustIG 1351 07.11.19 11:15 Сейчас в теме
(17) хорошо, что мнения разные. картина мира тоже у всех своя. напишите, пож-та , в каком городе вы работаете, какие конфигурации на ИТС-сопровождении? Какой франчайзи 1с вас обслуживает?
26. KAPACEB.AA 459 07.11.19 11:23 Сейчас в теме
(17) К сожалению, на собственном опыте сталкивался с нестабильной работой фонового обновления (8.3.13).
Думаю, ещё сыроват механизм...
16. dmitrydemenew 641 06.11.19 11:01 Сейчас в теме
(14)Зачастую, конфигурации, с которыми приходится работать - существенно измененные под нужды предприятия типовые, либо вовсе самописные. Их перевод на новую платформу, как правило, достаточно длительный и трудоемкий процесс. Запускать многомесячный проект переезда на другую платформу ради ускорения возможной реструктуризации - не самое рациональное решение.
zhichkin; JohnyDeath; RustIG; +3 Ответить
2. nomad_irk 71 05.11.19 16:49 Сейчас в теме
Типовой механизм, в последних версиях платформы, вроде же в этом смысле оптимизировали, не?
3. dmitrydemenew 641 05.11.19 17:15 Сейчас в теме
(2)я отметил это в тексте публикации. Публикация адресована в большей степени тем, кто реально сталкивается с описанной проблемой.
director04; Gilev.Vyacheslav; +2 Ответить
6. RustIG 1351 06.11.19 07:10 Сейчас в теме
(3) да, интересная идея и реализация!
5. RustIG 1351 06.11.19 07:09 Сейчас в теме
(2) " в последних версиях платформы"? интересно посмотреть на человека, который работает с последними версиями платформы. Я так привык, что последнюю версию на сегодняшний день я начинаю тестить не ранее чем через год-два.... и то благодаря типовой БП 3.0, и то "не испытываю", а просто ставлю...
корум; Fox-trot; zhichkin; dmitrydemenew; bulpi; +5 2 Ответить
7. nomad_irk 71 06.11.19 07:11 Сейчас в теме
(5) 8.3.11.2867 когда вышла?
Да и работая c ERP 2.4/БУХ 3/ЗУП 3/УТ11/Розница 2.2 требования к наличию "свежей" версии платформы жесткие.
8. RustIG 1351 06.11.19 07:45 Сейчас в теме
(7) при чем здесь 8.3.11?
вы написали "последние версии платформы" - последняя на сегодня 8.3.15.1747.
9. nomad_irk 71 06.11.19 07:48 Сейчас в теме
(8)При том, что 1с оптимизировала процесс реструктуризации в этой версии.
10. RustIG 1351 06.11.19 07:49 Сейчас в теме
12. buganov 200 06.11.19 09:57 Сейчас в теме
(2) Попробуйте таблицу в 100Гб реструктуризировать. Отпишитесь, как пройдет
21. starik-2005 3033 06.11.19 15:27 Сейчас в теме
Фоновая реструктуризация в старых версиях платформы часто (более одного раза точно) приводила к очистке таблиц. Вот была таблица с примерно лярдом файлов (может даже два лярда - да, и такое бывает), а потом она внезапно оказалась пустой. Реструктуризация этого всего (файлы не хранятся в базе - они отдельно, а реструктуризация из-за того, что тип владельца меняется - новый справочник появился или документ, к которому можно крепить файлы) - две недели. Что он там делает - хрен положить, но для бизнеса, который работает 24/7 на 1С (да, это ошибка - ежу понятно) ждать доступность таблицы с файлами в районе 2-х недель - это как-то бредово звучит, ч учетом того, что абсолютно ничего не меняется в таблице - тупая 1С читает, удаляет и записывает ровно одно и то же.

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

То, что 1С-неги в последних версиях платформы с этим что-то сделали - это радует. Давно пора.
zqzq; Fox-trot; endashi; Oboron; zhichkin; SirAlexIT; JohnyDeath; RustIG; nomad_irk; buganov; +10 Ответить
22. buganov 200 06.11.19 18:49 Сейчас в теме
(21) и документы гораздо прогнозируемее реструктуризировать отбросив табличные части. Никогда не понимал фишки, зачем трогать табличные части, если изменения только в шапке
zhichkin; +1 Ответить
23. starik-2005 3033 06.11.19 19:26 Сейчас в теме
(22) это не в понимании дело - это в трактовке согласованности из ACID: читаем объекты целиком, меняем из в соответствии со схемой миграции (изменений) и записываем целиком в транзакции взад. Но, видимо, прхитехтор букву закона про согласованность выучил, тест сдал, а подумать забыл - вот и реализуется подобная схема целиком (чтобы не нарушать отчетности принципа ACID). Думать на курсах, к сожалению не учат.
zhichkin; +1 Ответить
35. victor_goodwill 46 31.12.19 16:02 Сейчас в теме
Начиная с платформы версии 8.3.11.2867 1С оптимизировала типовой алгоритм реструктуризации, поэтому разработка наиболее актуальна для более ранних версий 8.3 и 8.2.

Доброе время суток. Насколько я понимаю типовой механизм реструктуризации был оптимизирован только для КОРП лицензий? Таким образом ваша обработка актуальна для обычных лицензий?
36. Oboron 14 11.06.20 14:35 Сейчас в теме
Работает, удобно.
В обработке для обычных форм кнопка "Завершить реструктуризацию" не привязана ни к одной процедуре. Собственно процедуры завершения тоже нет. Создать её проблем никаких, но лучше поправить.
37. IT_Magnit 07.11.20 19:43 Сейчас в теме
При добавлении новой колонки нужно использовать конструкцию " DEFAULT " + ЗначениеПоУмолчанию, чтобы потом не апдейтить всю таблицу.
38. fvadim 9 24.01.21 00:10 Сейчас в теме
есть проблема с реструктуризацией журналов.
делаю копии таблиц обработкой, при обновлении конфигуратор начинает реструктуризацию, запросом вижу, что заполняет пустые таблицы записями. 112 млн (((
платформа 8.3.16.1063.
gudok1703; +1 Ответить
39. director04 3657 07.10.21 09:07 Сейчас в теме
Дмитрий, подскажите, а удаление реквизитов (столбцов таблиц) можно проводить с помощью вашей обработки?.
У меня, при удалении реквизитов выдает ошибку о ссылках на данную колонку.
"Не удалось завершить реструктуризацию:
ALTER TABLE DROP COLUMN _Fld33997RRef failed because one or more objects access this column."
40. AlexeyIsip 26 22.08.22 11:22 Сейчас в теме
Подскажите, почему с Регистры накопления и Регистры бухгалтерии не стали добавлять в обработку? У меня, например, основная проблема в РН.СебестоимостьТоваров, РН.ВыручкаИСебестоимостьПродаж и РегистрБухгалтерии.Хозрасчетный (основной и для хранения значений субконт)
41. dave2000 91 17.08.23 12:00 Сейчас в теме
Есть два вопроса:
1. После реструктуризации нужно нажать "Анализ изменений..." и, если были какие-либо изменения, их нужно ВРУЧНУЮ внести средствами Management Studio, и только потом завершать реструктуризацию, верно?
2. А можно знать, почему регистры накопления изначально не включались в эту обработку? Я сначала думал, что к ним нужен какой-то особый подход, но когда прописал их в вашей обработке, то их вроде как тоже нормально отрабатывает. Или есть ещё какие-то ньюансы?
Прикрепленные файлы:
Оставьте свое сообщение