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

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

См. также

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

Во второй статье по докладу «Дамп – не приговор, а повод задуматься», с которым выступили на конференции INFOSTART TECH EVENT 2024, рассмотрим, какую информацию содержат файлы дампа, чем она полезна и как ее анализировать.

14.04.2025    418    it-expertise    2    

14

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

Где лежат данные идентификаторов, как прочитать, как поменять...

10.04.2025    477    atdonya    0    

3

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

Опубликовали первую статью по итогам доклада «Дамп – не приговор, а повод задуматься», с которым выступали на конференции INFOSTART TECH EVENT 2024.

25.03.2025    538    it-expertise    7    

8

Администрирование СУБД Системный администратор Абонемент ($m)

Всегда надо обслуживать индексы SQL. В том числе по рекомендации самой 1С. Но обслуживать все и сразу - долго, тяжело серверу и, главное, бессмысленно. Особенно для больших баз. Данный скрипт выбирает, что надо делать, и делает это автоматически. Готового полного аналога не нашел, поэтому сделал этот. Можно примерять для любых конфигураций и платформ 1С. Проверено на 8.3.25.1501.

1 стартмани

12.02.2025    744    24    GreyCardinal    14    

4

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

В рамках мастер-класса мы запустим нагрузочный тест на 3К пользователей и посмотрим, как будет вести себя PostgreSQL при такой нагрузке.

11.12.2024    2184    Tantor    1    

6

Администрирование СУБД Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

Много вариантов определения номера собственного процесса самого 1С8. В ходе поиска, опираясь на общедоступную информацию, дополнил алгоритм, но с учетом определения ИД запущенного приложения.

09.12.2024    1043    artly2000    6    

4

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

В крупных компаниях, где много типовых и сильно доработанных баз с режимом работы 24/7, переход с MS SQL на PostgreSQL затягивается. Получается гетерогенная структура – когда прод уже на PostgreSQL, а разработка и тестирование – пока на MS SQL. О том, какие варианты помогут постепенно перевести прод с несколькими базами MS SQL на PostgreSQL, не сломав среду тестирования и разработки, пойдет речь в статье.

21.11.2024    4610    a.doroshkevich    9    

17