Ускорение реструктуризации больших таблиц. Мой вариант

28.04.21

База данных - Администрирование СУБД

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

Чтобы обеспечить согласованность данных при реструктуризации объекта платформа создает таблицы пустышки и аккуратно переносит все данные из таблиц в новые. Даже, если добавляется в шапку реквизит, это не спасет от реструктуризации табличных частей в том числе. 

Для реструктуризации тех же 100 Гб может банально не хватить технологического окна, особенно в режиме работы предприятия 24/7 и, как следствие, такие компании предпринимают все меры, чтобы это окно уменьшить. Вплоть до нарушения(?) лицензионного соглашения. 

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

 
Текст скрипта

-- !!!
--      ВНИМАНИЕ!!! КАЖДЫЙ БЛОК ВЫПОЛНЯЕТСЯ ОТДЕЛЬНО!!!
-- !!!
-- !!!
-- 0) Переходим в область рабочей базы
use Ch 
go
-- 0

-- 1) Переименовываем рабочую таблицу в резерв (табличные части)
exec sp_rename '_Document33_VT36','_Document33_VT36_data','OBJECT'
-- 1 /конец блока/

-- 2) Создаем  пустые таблицы  =  табличные части для ее реструктуризации (проверка на существование)

if OBJECT_ID('_Document33_VT36','U') IS NULL begin
    select TOP 1 * into _Document33_VT36 from _Document33_VT36_data 
end
-- 2 /конец блока/

-- 3) НА СТОРОНЕ 1С ВЫПОЛНЯЕТСЯ РЕСТРУКТУРИЗАЦИЯ  (создается нужный индекс в шапке средствами 1С)

-- 4) Удаляются фиктивные таблицы (табличные части) после реструктуризации (есть проверка на нулевой размер)

--if (select count(*) from _Document33_VT36) > 0 begin 
    drop table _Document33_VT36  
--end
-- 4 /конец блока/

-- 5) Переименовываем назад из резерва (табличные части)
exec sp_rename '_Document33_VT36_data','_Document33_VT36','OBJECT'
 -- 5 /конец блока/
 

 

На примере выше необходимо реструктуризировать документ Document33, у которого всего лишь одна табличная часть _Document33_VT36. Если табличных частей больше, то и добавлять лучше все табличные части, чтобы ничего не забыть.

Имена можно посмотреть с помощью метода ПолучитьСтруктуруХраненияБазыДанных().

ВНИМАНИЕ! Каждый блок исполнять отдельно! 0 - 2 в SSMS, потом перейти в конфигуратор, обновить и далее оставшиеся пункты в SSMS. 

 

Картинки с тестовой убрал под спойлер:

 

 

 

Тесты проводились на тележке 8.2.19

Все манипуляции с БД вне среды 1С делаются на свой страх и риск. Если нет понимания, что происходит, то лучше изучить вопрос

реструктуризация обновление BigData

См. также

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Пользовался ранее https://infostart.ru/1c/articles/1120161/#, но она устарела, т.к. службы запускаются через systemctl, да и сами службы слегка изменились. Возможно, где-то на ИТС уже есть нужная инструкция, но мне не попалась.

15.11.2024    301    Baser    2    

1

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    831    Tantor    19    

14

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    3148    Tantor    38    

34

Администрирование СУБД Системный администратор Программист Бесплатно (free)

CDC - очень мощный механизм, который можно использовать во многих сценариях, возможность развернуть его в Docker показывает простоту и лёгкость данной технологии.

08.10.2024    734    AlexSvoykin    1    

7

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ и решение ошибок СУБД. Во время реиндексации базы Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Во время проверки целостности Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._RefSInf21806".

19.09.2024    4350    Xershi    10    

17

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    2972    1CUnlimited    9    

4