Ускорение реструктуризации таблиц

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

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

Итак. Программисты 80lvl скорее всего знают все и даже больше, чем описано в статье, поэтому эта публикация будет ориентирована в первую очередь на новичков. А так как у новичка скорее всего ни репутации и стартмани - все скрипты я не буду прикреплять, а выложу в статье.

Поехали. Предположим в вашей конфигурации есть некий документ, с 5 табличными частями. В СУБД (в нашем примере PosgreSQL, но все ниже сказанное справедливо и других СУБД) такой документ предстанет в виде 6 таблиц

Предположим вам необходимо добавить реквизит в табличную часть _document39_vt415, узнать какая именно табличная часть можно либо специальными обработками, либо просто посмотрев несколько записей из таблицы в самой СУБД. Что произойдет далее, точнее что сделает платформа 1С, она создаст копии всех 6 (!) таблиц документа и начнет копирование в них данных из старых таблиц - начнется реструктуризация. Процесс этот, мягко говоря, не быстрый. Почему я вообще пишу эту статью, потому что в моем случаи: количество документов (записей в _document39 было 1М) и записей в табличных частях 25М, процесс реструктуризации документа средствами 1С занял 48 часов. Так вот мы попытаемся обмануть платформу.

Продолжаем, добавляем реквизит в табличную часть в конфигураторе, у меня это число длинной 10, точность 0 (во время всех манипуляций его можно не закрывать), сохраняем, но не обновляем. Переименовываем все таблицы документа в pgAdmin или чем вы там пользуетесь (у меня это пара pgAdmin и EMS SQL Manager PostgreSQL), например _document39 в _document39_src

И создаем копии наших переименованных таблиц (пустые) с первоначальными именами, в нашем примере делаем пустую копию _document39_src с именем _document39.

Копии я создавал в EMS SQL Manager лишь потому, что в нем это проще, но можно и в  pgAdmin. В нем надо в контекстном меню таблицы выбрать Скрипты - CREATE и в окне SQL редактора изменить имя таблицы на новое.

Если посмотреть в предприятии, у нас нет ни одного документа.

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

Смотрим какое имя получила новая колонка таблицы, которая соответствует новому реквизиту.

У меня это _fld1097. Возвращаемся к нашей исходной таблице, которую мы переименовали в _document39_src, добавляем новую колонку в нее

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

Запускаем предприятие и проверяем. Радуемся или плачем.

Итак, это мы добавили реквизит, рассмотрим теперь случай, если нам надо изменить тип реквизита, например, было число (5, 2), надо число (10, 4), или добавить индексов.

Тут есть два варианта.

Вариант первый. Создаем копии таблиц и заливаем в них данные из основной таблицы

SELECT * INTO _document39_copy FROM _document39; SELECT * INTO _document39_vt415_copy FROM _document39_vt415; SELECT * INTO _document39_vt431_copy FROM _document39_vt431; SELECT * INTO _document39_vt434_copy FROM _document39_vt434; SELECT * INTO _document39_vt437_copy FROM _document39_vt437; SELECT * INTO _document39_vt444_copy FROM _document39_vt444;


После этого очищаем исходные таблицы, т.е. доходим до момента, когда 1С думает, что у нас нет записей в таблицах документ. Делаем все необходимые изменения в конфигураторе и обновляем. Теперь нам надо вернуть данные назад

NSERT INTO _document39( _idrref, _version, _marked, _date_time, _numberpfix, _number, _posted, _fld556, _fld392rref, _fld393rref, _fld394, _fld395, _fld579, _fld396, _fld397, _fld398rref, _fld399, _fld400, _fld401rref, _fld1018rref, _fld403, _fld402rref, _fld404rref, _fld405, _fld538rref, _fld406, _fld407, _fld408rref, _fld409rref, _fld410rref, _fld411rref, _fld412rref, _fld413, _fld414) select * from _document39_copy; -- ~60min (1.5 M records) INSERT INTO _document39_vt431( _document39_idrref, _keyfield, _lineno432, _fld433rref) select * from _document39_vt431_copy; INSERT INTO _document39_vt434( _document39_idrref, _keyfield, _lineno435, _fld436rref) select * from _document39_vt434_copy; INSERT INTO _document39_vt437( _document39_idrref, _keyfield, _lineno438, _fld439rref, _fld440rref, _fld441, _fld442rref) select * from _document39_vt437_copy; INSERT INTO _document39_vt444( _document39_idrref, _keyfield, _lineno445, _fld446rref) select * from _document39_vt444_copy; --3 min INSERT INTO _document39_vt415( _document39_idrref, _keyfield, _lineno416, _fld426rref, _fld423, _fld419rref, _fld421, _fld420, _fld536, _fld425, _fld418, _fld422, _fld428rref, _fld427rref, _fld417rref, _fld429, _fld424) select * from _document39_vt415_copy; --16588297 строк, 18.5 h

Запускаем предприятие и проверяем. Радуемся или плачем.

Вариант второй. Кто-то считает, что INSERT INTO работает медленно, поэтому можно использовать следующие скрипты, работающие не с копиями таблицы а с файлами на диске

COPY BINARY _document39 TO 'e:/_document39'; COPY BINARY _document39_vt431 TO 'e:/_document39_vt431'; COPY BINARY _document39_vt434 TO 'e:/_document39_vt434'; COPY BINARY _document39_vt437 TO 'e:/_document39_vt437'; COPY BINARY _document39_vt444 TO 'e:/_document39_vt444'; COPY BINARY _document39_vt415 TO 'e:/_document39_vt415';

где 'e:/_document39' это файл в корне диска е.

Скрипт загружающий данные обратно

COPY BINARY _document39 FROM 'e:/_document39'; COPY BINARY _document39_vt431 FROM 'e:/_document39_vt431'; COPY BINARY _document39_vt434 FROM 'e:/_document39_vt434'; COPY BINARY _document39_vt437 FROM 'e:/_document39_vt437'; COPY BINARY _document39_vt444 FROM 'e:/_document39_vt444'; COPY BINARY _document39_vt415 FROM 'e:/_document39_vt415';

На этом, пожалуй все.

Как видно, процесс это все равно долгий (около 18 часов у меня). Что мы получили, около 19 часов против 48 при изменении типа реквизита и добавлении индексов, и около 1 часа против 48 часов при добавлении реквизита.

PS. У меня есть подозрение, что на других СУБД реструктуризация средствами платформы будет быстрей. К тому же у меня стоял старый PosgresSQL, еще 8.2.4-3.1

Начать дискуссию

Общество

👍 Президент подписал закон, упрощающий принятие решений на общих собраниях членов СНТ и ОНТ

Владимир Путин подписал разработанный при участии Росреестра федеральный закон, которым упрощен процесс принятия решений на общих собраниях членов садоводческих (СНТ) и огороднических товариществ.

Патентная активность российских изобретателей выросла на 7%

Более 15 000 заявок на патентование изобретений и полезных моделей подали отечественные разработчики в Федеральную службу по интеллектуальной собственности (Роспатент) с января по июнь 2024 года.

Опубликованы поручения Президента по итогам Петербургского международного экономического форума-2024

Владимир Путин утвердил перечень поручений по итогам ПМЭФ-2024, который прошел 5–8 июня.

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора

Нацбюро кредитных историй назвало средний размер автокредита

По данным кредиторов, передающих сведения в Национальное бюро кредитных историй (НБКИ), в июне 2024 года средний размер выданных автокредитов составил 1,47 млн рублей.

МВД: если поменяли сим-карту, открепите номер от Госуслуг и мобильного приложения

Киберпреступники приобретают старые сим-карты, которые уже были использованы и поступили в повторную продажу.

1
УК РФ

Ответственность за цифровые преступления ужесточат

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

Опытом делятся эксперты-практики, без воды

Как разработать детальный финансовый план и бюджет для бизнеса

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

Инвестиции

Пополнил брокерский счет на 300 000 в июле. Что купил? Часть 2

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

Пополнил брокерский счет на 300 000 в июле. Что купил? Часть 2

Новые функции и улучшения на «Клерке»: обновления за июль. Выпуск #1

В июле представили обновления: сортировка главной страницы одним кликом, новый инструмент для самозанятых, возможность монетизации для авторов в "Трибуне" и продвижение материалов в блогах компаний. Также улучшен сервис "Клерк.Работа" и введены новые функции для Бизнес Аккаунта и личного кабинета.

Новые функции и улучшения на «Клерке»: обновления за июль. Выпуск #1
2
Обзоры новостей

Налог на бездетность, Ивлеева уплатила долг, НДФЛ при манипуляциях с землей в обзоре

Интересные события в налоговой сфере.

Бухгалтеры не видят актуальных данных ЕНС и не могут сформировать электронные подписи в ЛК. 🔨«Ночной бухгалтер» № 1733

Никогда такого не было... Бухгалтеры жалуются, что в личных кабинетах невозможно посмотреть актуальную информацию по сальдо ЕНС. Данные стоят на 15, 18, 19 июля. Если написать через ЛК налоговикам, сведения обновляются, но не всем. Формировать электронные подписи многие также не могут, не отправить 3-НДФЛ, не обновить электронные подписи.

Иллюстрация: Вера Ревина/Клерк.ру
Инвестиции

Физлицам и компаниям ЕС запретили участвовать в российской схеме обмена активами

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

ОСАГО

ОСАГО можно оформить онлайн через Сбер

Водители могут застраховать машину онлайн за несколько минут. Достаточно ввести данные документов и выбрать страховщика на маркетплейсе Сбербанка.

Для россиян тоже установят лимит на количество сим-карт

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

Сотрудников не могут заставить сдавать отпечатки пальцев

Частные компании не имеют права проводить дактилоскопическую регистрацию сотрудников, чтобы наладить пропускной режим на объекте.

Бухгалтеры

НДС на УСН в 2025 году, выбор налогового режима, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года

Подготовили для вас анонс предстоящих вебинаров в августе.

НДС на УСН в 2025 году, выбор налогового режима, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года
Новости ФНС

ФНС начнет регистрировать личные фонды россиян

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

Личные финансы

Цены на туры в Турцию выросли до 300 000 рублей за среднюю путевку

Итоги первой половины лета показали, что отдых на море в этом году стал для россиян дороже еще на несколько десятков процентов. Подорожало все — и гостиницы, и перелеты, и пакетные туры. Причем не только за границей, но и в России.

Бесплатно с Трудовое право

Трудовые споры: сколько денег можно взыскать с работодателя за неправильную запись в трудовой книжке 

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

Трудовые споры: сколько денег можно взыскать с работодателя за неправильную запись в трудовой книжке 

Интересные материалы

Кадровый учет

Перемещение работника

В данном материале рассмотрим, как выглядит процедура перемещения сотрудника. Поговорим о том, какими документами оформляется это кадровое мероприятие. Разберем, в чем состоят отличия между перемещением и переводом работника.

Иллюстрация: Вера Ревина/Клерк.ру