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

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

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

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

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

О госзакупках простым языком

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

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

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

МВД хочет приостанавливать денежные переводы в рамках уголовного преследования

Силовые структуры смогут приостанавливать такие переводы на 10 дней

Банки обяжут за 24 часа предоставлять в МВД данные о переводе цифровых денег

Ведомство разработало проект соответствующего федерального закона

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

Киргизский Finca Bank приостановит зачисление переводов из «Сбера» и «Тинькофф»

Ограничения начнут действовать в мае

125

⚡️Меняем тарифы на «Клерке». Успейте подключить безлимитные консультации

У нас молния. С понедельника на «Клерке» произойдут изменения. Тарифов с безлимитными консультациями больше не будет. Хотите безлимит? Подключайте тариф на год или на полтора прямо сейчас.

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

В Telegram можно заработать на продаже стикеров

Создатели стикеров и эмодзи в Telegram смогут получить в криптовалюте 95% выручки от продажи своего творчества.

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

👵 Чтобы заработать пенсию, самозанятые должны платить добровольные взносы. Но не обязаны, уточняет наш эксперт

В стаж для пенсии идет период работы, если за этот период начисляют и уплачивают взносы. За работников взносы платит работодатель, ИП сами платят свои взносы. А самозанятые не платят.

Экономика России

Официально: сколько в России ресторанов, кафе и баров

Росстат привел статистику за 2023 год по местам общепита.

Налоговая подсмотрит за вами через камеры, если понадобится. 🎥«Ночной бухгалтер» № 1668

Улыбнитесь, вас скрывает скрытая камера! А может и не скрытая, а просто камера наблюдения на улице. Корреспондент «Клерка» узнала о любопытном способе налоговиков проверять ваш бизнес.

Иллюстрация: создана при помощи ИИ playground.com / Елена Балаклицкая

КС РФ: иногда УК должна продолжать управление домом и после прекращения договора

Конституционный Суд уточнил порядок прекращения обязательств компании (УК) по управлению многоквартирным домом.

Малый и средний бизнес выпустил облигации на 2,5 млрд рублей

До конца года МСП Банк готов поддержать выпуск биржевых облигаций компаний на сумму до 8 млрд рублей.

Банкротство

Новое постановление КС: как теперь платить налоги при банкротстве компании

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

Миникурсы, текстовые и видеоинструкции для бухгалтеров
Бухгалтеры

❗️ Оформите подписку «Клерк.Премиум» со скидкой 50%! В понедельник цена вырастет

До 22 апреля вы можете купить подписку «Клерк.Премиум» на 12 месяцев со скидкой 50% за 9900 рублей. Успейте получить доступ к образовательным материалам «Клерка» по старой цене.

Больничные

Как бывшим контрактникам считать стаж для оплаты больничного

Военная служба по контракту входит в стаж для больничного.

Самозанятый написал жалобу на руководителя в трудовую? А так можно было?

Привет, это налоговый юрист для бизнеса и СЕО «Патрикеев и партнеры» Павел Патрикеев. И я никогда не думал, что тема переквалификации будет окутана такими интригами.

Самозанятый написал жалобу на руководителя в трудовую? А так можно было?
1
207
Обзоры новостей

⚡️ Итоги дня: сотрудники не хотят терпеть токсичных начальников, глава Willdberries стала обедневшим миллиардером, в Москве будет шторм, а Питер завалит снегом

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

150

Решила зайти в рефералку «Клерка». Как думаете, получится?

Коллеги, решила поделиться с вами. Сегодня решила стать участником Клерк.Партнер. Буду рекомендовать наши курсы и вебинары и получать пассивный доход. Говорят, что через рефералку может зарабатывать любой, а не только менеджеры. Посмотрим, что у меня получится😉

Иллюстрация: создано с помощью ИИ OpenAI © Вера Ревина/Клерк.ру
Охрана труда

Порядок обучения сотрудников по охране труда в организации

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

Иллюстрация: dcstudio/freepik
Бухгалтеры

Эксперты «Клерка» ответили с начала года на 3000+ вопросов бухгалтеров. Торопитесь — безлимитные консультации можно получать только до 21 апреля!

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

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

Сайты с картинками могут воровать telegram-аккаунты

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

76