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

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

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

Итак. Программисты 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

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

Иностранные компании потеряли больше 107 млрд долларов от ухода с российского рынка

Предприятия, которые перестали работать в России, несут убытки от списания активов и недополучают доходы.

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

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

Не открывайте бизнес с нуля. Купите готовый

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

🚖 У работодателей будет новая обязанность. Возможно придется оплачивать сотрудникам такси + опрос

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

Лучшие спикеры, новый каждый день

Узнай звезду! Бухгалтер, оторвись от работы, перегрузи мозги

Время послеобеденного отдыха! Давайте на 10 минут дадим себе отдохнуть и поиграем. Перезагрузка тоже важна.

Создано с помощью ИИ OpenAI © Вера Ревина, Клерк
134

Мошенники выдают себя за сотрудников ФНС и требуют прислать налоговые декларации

Сотрудники ФНС не рассылают электронные сообщения о задолженности и не требуют оплатить ее онлайн. Такие схемы применяют только мошенники. Декларации физлица и компании должны подавать самостоятельно.

Этапы регистрации кабинета в ЕГИСЗ (а также подсистемах ФРМР и ФРМР)

В статье даем пошаговую инструкцию по регистрации кабинета в ЕГИСЗ и подсистемах ФРМР и ФРМО для медорганизаций.

Этапы регистрации кабинета в ЕГИСЗ (а также подсистемах ФРМР и ФРМР)
Опытом делятся эксперты-практики, без воды

«Тинькофф» стал оператором по выпуску цифровых финансовых активов

Теперь банк «Тинькофф» может обеспечивать заключение сделок с ЦФА по купле-продаже активов, их обмену и другим операциям.

Понятие «ключевая разовая проблема». Для чего нужно её искать?

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

Понятие «ключевая разовая проблема». Для чего нужно её искать?
44

Вышел рейтинг операторов фискальных данных — 2024

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

Вышел рейтинг операторов фискальных данных — 2024

Стало известно, на сколько выросла выручка ИТ-компаний в России

По предварительным данным Минцифры выручка ИТ-компаний составила 5,5 трлн рублей и увеличилась на 43% за 2023 год.

Акцизы

В декларации по акцизам появятся новые коды для алкоголя

Для заполнения декларации по акцизам с 1 мая нужно указывать новые коды для алкогольной продукции с содержанием спирта.

Как предпринимателю не подставить себя перед налоговой

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

Как предпринимателю не подставить себя перед налоговой
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Для НКО продлят пониженные тарифы страховых взносов

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

Принят закон о свободном доступе провайдеров в многоквартирные дома

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

3
177

Расходы на ремонт служебных автомобилей выросли на 25%

Общая сумма госконтрактов по ремонту и обслуживанию автомобилей выросла до 30 млрд рублей, а число торгов увеличилось на 5%.

УСН

Минфин: при торговле через маркетплейсы на УСН агентское вознаграждение тоже идет в доход

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

Основные изменения по НДС в 2023–2024 

Большинство последних новаций по налогу на добавленную стоимость являются «отраслевыми». Поправки касаются застройщиков, экспортеров, рестораторов, туроператоров, продавцов детских товаров и даже перекупщиков б/у авто. В статье собрали для вас самые важные изменения на 2023–2024 гг.

Основные изменения по НДС в 2023–2024 
2
73

Будут изменения по имущественным налогам: обзор от ФНС

В НК внесут поправки, направленные на повышение эффективности налогообложения имущества.

Верховный суд РФ может изменить практику назначения выездных налоговых проверок

Мнение налогового адвоката о судебном иске к ФНС о незаконности налоговой проверки.

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

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

Бухотчетность составляют в тысячах рублей. Опрос про ошибки из-за округлений

До 1 апреля компании должны сдать бухотчетность за 2023 год.

244