Миллионы строк в таблицах 1С? Быстрая реструктуризация - не проблема!

Публикация № 536650

Администрирование - Производительность и оптимизация (HighLoad)

Иногда случаются ситуации, когда в некую таблицу 1С (будь то справочник, регистр сведений или накопления) - необходимо добавить новое поле (реквизит, измерение, ресурс). В обычной ситуации, когда строк в таблице самой БД немного - платформа спокойно справляется с этой задачей. Но что делать, если строк накопилось за время ведения учета 1 млн? А если 10 млн? 100 млн? Более 300 млн? Если Вы не хотите ждать N-ое количество суток в ожидании, когда же закончится реструктуризация, или изобретать другие способы - статья для Вас. Основная идея заключается в том, что соответствие имен метаданных объектов конфигурации 1С (а также их ссылочных взаимосвязей между собой) и имен физических таблиц и колонок в самой БД - эта информация хранится в служебных таблицах этой же БД.

300 млн. строк? Что это? Разве такое возможно? Да, и если кто-то не может представить себе такую ситуацию - поверьте, вполне! В моей практике в ИБ 1С, в регистре сведений, хранились все изменения всех-всех ключевых документов/справочников/регистров сведений сильно измененной, большой и сильно допиленной УПП - создания, изменения и т.д. За год там накопилось около 320 млн строк. И, как всегда это бывает, понадобилось добавить колонку, то есть новый реквизит в эту таблицу. Вот алгоритм действий, с помощью которого можно довольно быстро решить задачу:

Все описанное актуально для ИБ, развернутых в клиент-серверном варианте. Я тестировал на MS SQL, но думаю, на остальных СУБД - все тоже самое. Тесты проводились на типовой УПП 1.3.78.1. Платформа 8.3.5.1460,  MS SQL EXPRESS.

1. Делаем резервную копию базы-источника средствами СУБД. Подчеркиваю, средствами СУБД, так как нам нужен полный зеркальный снимок нашей базы данных. Не используем выгрузку в dt, да собственно, раз Вы столкнулись с такими объемами - то навряд ли подумаете об этом.

2. Из резервной копии поднимаем точно такую же базу, регистрируем ее на сервере приложений 1С. Далее, в моем примере UPP1 - база-источник, UPP2 - ее точная свежая копия.

3. Для начала добавим в базе UPP2 в справочник Номенклатура строковый реквизит, к примеру назовем его СтрокаПокупатель, тип строка (50), неиндексируемое. После того, как мы подняли из резервной копии новую базу, подключаемся к ней средствам СУБД, например с помощью Management Studio. Теперь нам надо выяснить, какая же таблица БД соответствует имени метаданных "Справочник.Номенклатура". Я для этой цели использовал удобную обработку из состава мобильных Инструментов Разработчика, но у кого ее нет под рукой - легко вытащить всю нужную информацию с помощью функции ПолучитьСтруктуруХраненияБазыДанных. Итак, я выяснил, что в моей конфигурации это таблица _Reference95. Будем считать, что именно в этой таблице у меня миллионы строк. Произведем ее очистку скриптом:

TRUNCATE TABLE UPP2.dbo._Reference95

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

4. Запускаем конфигуратор для UPP2. Снимаем нужный объект с поддержки, добавляем реквизит - все как обычно. Обновляем конфигурацию базы данных, так как строки из таблицы мы удалили - реструктуризация и обновление пройдет быстро.

5. Теперь нам снова нужно выяснить, какая колонка в БД SQL была добавлена в нашу таблицу справочника "Номенклатура". У меня это колонка имеет название _Fld33662, тип nvarchar(50), NULL. Идем в базу UPP1 с помощью MenStudio. Находим таблицу_Reference95 и добавляем столбец. Как добавить столбец, выполнить произвольный запрос - будем считать, что это все умеют, а кто не умеет - разберется самостоятельно. Обращаю внимание, что добавлять столбцы в уже существующую и заполненную таблицу можно только установив флаг "разрешить Null", иначе инструкция ALTER TABLE, которая изменяет таблицу - не сработает. 

6. Выгоняем пользователей из UPP1. Далее выполняем следующий скрипт:

BEGIN TRAN Tr1

DELETE FROM UPP1.dbo.Config

DELETE FROM UPP1.dbo.DBSchema

DELETE FROM UPP1.dbo.Files

DELETE FROM UPP1.dbo.Params

INSERT INTO UPP1.dbo.Config 
SELECT *
FROM UPP2.dbo.Config

INSERT INTO UPP1.dbo.DBSchema 
SELECT *
FROM UPP2.dbo.DBSchema

INSERT INTO UPP1.dbo.Files 
SELECT *
FROM UPP2.dbo.Files

INSERT INTO UPP1.dbo.Params 
SELECT *
FROM UPP2.dbo.Params

COMMIT TRAN Tr1

7. Открываем конфигуратор UPP1, видим, что наш реквизит добавился в справочник "Номенклатура". Запускаем предприятие и выясняем, что новому реквизиту действительно соответствует колонка _Fld33662. Пробуем открыть любой элемент справочника или выполнить запросов, прочитав новый реквизит. Если прочиталось - все получилось. Для очистки совести можно выполнить проверку ссылочной целостности конфигурации в меню тестирования и исправления. У меня проблем не возникло.

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

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

Алгоритм тот же самый, но теперь колонки в искомую базу из ее зеркальной копии мы будем добавлять не в одну таблицу, а в две - таблицу самих движений и таблицу итогов. И, если измерение индексируемое - выясняем, какой индекс добавился (добавится 1-н некластерный индекс) и как изменится кластерный индекс и вручную выполняем эти изменения в базе-источнике для обеих таблиц. Смотрим состав полей индекса в зеркале, переносим в источник. Так как в таблицах регистров накопления значения ссылочных полей не допускают типа Null, то в этой ситуации придется выполнить скрипт:

UPDATE UPP1.dbo._AccumRg17789   
SET UPP1.dbo._AccumRg17789._Fld33665RRef = Convert(binary(16), 0) 
FROM UPP1.dbo._AccumRg17789

UPDATE UPP1.dbo._AccumRgT17798  
SET UPP1.dbo._AccumRgT17798._Fld33665RRef = Convert(binary(16), 0) 
FROM UPP1.dbo._AccumRgT17798

Так как у нас там миллионы строк - неизвестно, насколько быстро это отработает. К сожалению, для тестов у меня не было таких объемов данных, поэтому однозначного ответа дать не могу. Но, если очень нужно - можно немного усложнить эти запросы, обновлять эти поля в таблицах порциями, например по 100 тыс. записей и повесить выполнение на "тайм-джоб" в самой СУБД.

Надеюсь, мой опыт кому-нибудь будет полезен.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. kauksi 206 13.07.16 09:41 Сейчас в теме
чтож 1с на уровне движка не могла такой же алгоритм реализовать...
3. asved.ru 35 13.07.16 09:45 Сейчас в теме
(1) kauksi, похожий алгоритм, но обходящийся всего одной базой, реализован в поставке КОРП.
http://v8.1c.ru/news/newsAbout.jsp?id=9320

Платформа 1С:Предприятие 8.3 КОРП - новые лицензии для корпоративных клиентов
сервер уровня КОРП поддерживает:

фоновое обновление конфигурации базы данных;
8. starik-2005 2021 13.07.16 12:24 Сейчас в теме
(3) asved.ru, как-то фоново обновляли конфу - система взяла и удалила все элементы справочника Файлы и все задачи. Вот было весело потом все из бэкапа. НЕ ПОЛЬЗУЙТЕСЬ ФОНОВЫМ ОБНОВЛЕНИЕМ БЕЗ АКТУАЛЬНОГО БЭКАПА!!! !C в этом плане - тупая система безо всякой оптимизации.

Вообще, для быстрой реструктуризации я переименовывал таблицу, предварительно генеря скрипт создания таблицы. Потом этим скриптом создаю новую таблицу, потом реструктуризирую, потом грохаю новую таблицу, предварительно генеря скрипт создания с новыми полями и индексами. Потом переименовываю старую таблицу обратно и АЛЬТЕР КООЛОНКА/АЛЬТЕР ИНДЕКС создаю соответствующие колонки и индексы.

Skif1989; formica32; nvv1970; Silenser; Yashazz; +5 Ответить
37. CratosX 107 09.12.19 21:29 Сейчас в теме
(8) какая версия платформы использовалась?
38. starik-2005 2021 10.12.19 14:14 Сейчас в теме
(37)
какая версия платформы использовалась?
8.3.6, если память не изменяет. Может быть и более новая. Но сдается мне, что ничего глобально не поправили, т.к. также создаются таблицы "new generation", в которые льется это все в процессе "фонового обновления", после чего происходит этакое переименовывание "новой генерации" в "старую" и сервер приложений получает инфу, что все, надо юзать только старые таблицы. Предположу, что если таблица достаточно большая, то сервер приложений рано или поздно "забывает" о том, что есть какое-то полуновое состояние у этой таблички (а если еще и связанные таблички есть - вообще мрак). Ну или если rphost валится, что часто бывает на высоконагруженных проектах, ибо то памяти лимит тогойт, то внешняя компонента в двух потоках одновременно инициализируется, то еще какая неприятность.
2. asved.ru 35 13.07.16 09:43 Сейчас в теме
Закат солнца вручную :)

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

А вообще - приобретайте поставвку КОРП, делайте фоновое обновление и будет вам счастье без хирургии на уровне СУБД.
KroVladS; +1 Ответить
4. Dach 293 13.07.16 09:50 Сейчас в теме
(2) asved.ru, разумеется. Но именно с конфигурацией. Обратите внимание, в скрипте копирования нет переноса таблицы ConfigSave - это в ней хранится информация о динамическом обновлении. Данные могут продолжать вводиться, то есть пользователи могут продолжать спокойно работать, пока мы делаем зеркало, очищаем в нем нужные таблицы, устанавливаем связи "имя метаданного - имя колонки БД". А вот когда уже работаем с источником - завершаем все соединения с базой, кроме своего собственного.
5. asved.ru 35 13.07.16 10:09 Сейчас в теме
(4) в ConfigSave хранится не динамическое обновление, а сохраненная основная конфигурация, еще не примененная к БД (не записанная в Config)
6. Dach 293 13.07.16 10:52 Сейчас в теме
(5) asved.ru, это и имел ввиду.

Дополнительно к пункту 5 статьи. Инструкцию ALTER TABLE можно выполнить с хинтом DEFAULT, указав значение колонки по умолчанию. В этом случаем добавляемая колонка может иметь строгий тип и не содержать NULL, то есть к примеру nchar(20), not null. В таком виде скрипт вот такого вида

ALTER TABLE #tt1 ADD tekst2 VARCHAR(20) Not NULL DEFAULT 'sdergf'

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

Сам лично считаю, что в общем случае лучше добавить колонку с возможностью содержания Null, а затем проапдейтить таблицу самостоятельно, выбрав только те строки, которые нужны. К примеру, зачем мне данные старых, закрытых периодов. Валяются там в таких строках в этой колонке null, ну и ладно.
18. theshadowco 142 13.07.16 21:38 Сейчас в теме
(6) Колонки Nullable плохо влияют на производительность выполнения запросов
10. starik-2005 2021 13.07.16 12:42 Сейчас в теме
(4) действительно, в конфигсэйве не хранятся данные динамического обновления - они хранятся в конфиге с соответствующими постфиксами в именах "файлов". Мы динамическое обновление делали просто накатывая изменения в конфигсэйве в конфиг. Даже перезапускать 1С не всегда после этого было нужно, чтобы получить новые версии объектов. Но, конечно, если что-то в кеше - то оно могло и не перегрузиться с сервера, но после очистки кеша все становилось на свои места. С другой стороны, и при динамическом обновлении происходит периодически такая проблема. При том при динамическом обновлении есть одна важная проблема, которая периодически проявляется - это затирание предыдущих динамически обновленных вариантов данных, если при последнем обновлении (нединамическом) они не были изменены. Так что лучше накатывать конфигсейв на конфиг, чем играть в рулетку при обновлении 1С - меньше шансов попасть в висок. Ну и бэкапы делать перед всякими подобными действиями весьма не помешает.
7. necropunk 7 13.07.16 12:07 Сейчас в теме
Было что-то похожее когда-то уже
http://infostart.ru/public/199018/

А не пробовали изменять иерархию в справочнике с элементов на группы? Не смотрели что на уровне СУБД происходит?

(2) asved.ru, по поводу КОРП поставки - пробовали уже так делать? Нормально отрабатывает на больших таблицах, не приходится потом бэкапы ворочать?
9. starik-2005 2021 13.07.16 12:33 Сейчас в теме
(7) necropunk, в точку! Приходится и еще как! Нам в свое время повезло - у нас был актуальный бэкап и мы прямо в SQL накалтили из базы бэкапа убитые 1С-кой таблицы.

Вообще, как только заметили, что таблицы сдохли - сразу стопанули эту "фоновую реструктуризацию" и уже приняли решения, что будем обновлять через переименовывание таблиц и последующее создание колонок и индексов. Сами колонки на той же таблице файлов создались мгновенно (2,9 млн файлов на тот момент было), для документов последующий абдейт занял около пяти минут (заполнялись новые колонки суммами из табличных частей документов - тоже около 3 миллионов документов всего - 4 вида). До этого пытались обновить - реструктуризация за 6 часов не успевала произвестись на весьма неслабом сервере.
11. asved.ru 35 13.07.16 13:02 Сейчас в теме
(7) necropunk, на тесте отработало нормально, но тест был без параллельной нагрузки пользователями. Плотнее не тестил.
(9) starik-2005, наличие актуального бэкапа перед обновлением - это не везение, а то, что пишут в регламентах кровью. Иногда кровью ответственных за обновление, которые этот бэкап не сделали.
12. Dach 293 13.07.16 13:45 Сейчас в теме
(7) necropunk, там похожий алгоритм, да, только автор выполняет манипуляции внутри одной информационной базы, а я использую зеркальный ее снимок. Грубо говоря, отличия только в том, что я чисто эмпирически выяснил, какие служебные таблицы нужно скопировать из зеркала, чтобы в источнике получить новую структуру. А в приведенной публикации этим не заморачиваются, так как все внутри одной и той же базы.

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

ALTER TABLE ##tt1 ALTER COLUMN tekst nvarchar(100) not null
14. necropunk 7 13.07.16 15:12 Сейчас в теме
(12) надо попробовать такую штуку проделать с изменением иерархии, посмотреть что он там меняет и можно ли скриптом это как-то перенести... А то реструктуризация после такого изменения часов 20 идет, а у нас на все регламенты не больше шести.
15. Dach 293 13.07.16 15:26 Сейчас в теме
(14) necropunk, имеется ввиду, что будет в СУБД, если изменить глубину иерархии справочника?

(8) starik-2005, а как Вы "генерируете" текст скрипта? я так понял, удалось как-то автоматизировать создание текста запроса"АЛЬТЕР КОЛОНКА" ?
16. necropunk 7 13.07.16 17:01 Сейчас в теме
(15) у нас просто есть справочник, в нем надо изменить иерархию с "Элементы" на "Группы". Проблема в том, что справочник огромный. Реструктуризация идет очень долго, за ночь точно не успевает.
17. theshadowco 142 13.07.16 21:32 Сейчас в теме
(15)
Могу рассказать на своем примере: на разработку инструмента выполнения практически любой длительной реструктуризации ушло примерно 4 дня. Могу сказать, что альтер это не самое интересное:
  • Создание/обновление индексов
  • Изменение типа колонки с индексом / без
  • Обновление структуры иерархического справочника

PS. Инструмент писал чисто в ознакомительных целях и с целью прокачки познании SQL. Распространять и использовать его в бою не собираюсь ибо чту лицензионну политику.
19. necropunk 7 14.07.16 09:43 Сейчас в теме
(17) theshadowco, хоть статью напишите, для тех у кого уже нет выхода - только нарушать политику... Про иерархическую структуру интересно.
20. Dach 293 14.07.16 10:29 Сейчас в теме
(17) theshadowco, особо автоматизировать этот процесс смысла нет и писать какой-то универсальный T-SQL код. Так как, ИМХО, таблицы содержащие огромные объемы данных (от 1 млн и больше) - не должны подвергаться частому изменению структуры. Такая таблица после ввода системы в эксплуатацию должна как минимум какое-то длительное время работать спокойно и все. А если Вы туда постоянно добавляете колонки, при этом строк там уже 100500 млн - ну что сказать... проектировать надо сразу нормально. Создание/обновление индексов, изменение типа колонки - все это мы здесь уже обсудили, руками все прекрасно делается, ради такой операции раз в год можно и потерпеть. С остальным платформа справляется сама.

(19) протестирую, что происходит в иерархическом справочнике - отпишусь.

21. theshadowco 142 14.07.16 17:01 Сейчас в теме
(20) С утверждением почти согласен - надо все делать правильно и не переделывать.
Но как показывает опыт идеальный мир в котором все таблицы спроектированы верно и не меняются никогда существует только в мечтах.
Изменения таблиц размером от 70 гб или от 100 млн записей происходят более часто, чем хотелось бы.
23. starik-2005 2021 14.07.16 20:58 Сейчас в теме
(15) вариантов масса, но однозначно сказать, какой номер филда будет следующим, сложновато, поэтому скрипт создания генерил с помощью механизма скул студио, а потом из нового скрипта создания выдирал новые филды и вставлял в АЛЬТЕР КОЛОНКА и ИНДЕКС.

Данные операции по большому счету требуется лишь тем компаниям, где доступность сервисов стремятся сделать 24/7, а 1С своей тупо реализованной реструктуризацией (именно тупо, и никак иначе) сводит данные потуги на нет. Поэтому или система перестает развиваться архитектурно и к ней начинают лепить миллионы строк когда внешних обработок, компонент и прочего хлама, чрезвычайно затрудняющего поддержку, либо при изменении архитектуры приходится посылать на три буквы лицензионное соглашение с идиотами, тупо написавшими (именно тупо, и никак иначе) механизм реструктуризации и делать все прямыми руками.
theshadowco; +1 Ответить
35. KroVladS 32 20.09.16 10:10 Сейчас в теме
(2) asved.ru,
демонического обновления


в точку!
13. tormozit 5755 13.07.16 15:08 Сейчас в теме
Когда я явистам (Javaстам) рассказывал, как работает реструктуризация в 1С на больших таблицах, они удивились. Конечно тут есть что оптимизировать в платформе. И подобные статьи способствуют движению в этом направлении.
22. theshadowco 142 14.07.16 17:14 Сейчас в теме
24. Sergey.Noskov 1125 15.07.16 11:37 Сейчас в теме
(0) Dach, спасибо за статью.
Но она претендует на универсальность, при этом ничего не сказано, что данные действия нарушают лицензионное соглашение, кто то сделает (не совсем осознавая рисков), получит косяк и задаст вопрос в 1С, "я тут скрипт выполнил, теперь какие то глюки, ПАМАХИТЕ...". Ну и колонки с типом "содержит NULL" пока кроме как в иерархических справочниках не видел. Использовать этот тип в других объектах не советую т.к. может привести к снижению производительности.
25. starik-2005 2021 15.07.16 13:05 Сейчас в теме
(24) Sergey.Noskov, покажите мне того, кто обращался в 1С с "ПАМАХИТЕ" и получил ответ? Мы в свое время обращались к ним постоянно, посылали дампы в гигабайты, отправляли всю доступную информацию, а результат простой - да, есть проблема, пофиксим в следующем релизе. Остальное на тему "у нас сломалась база" в 1С даже не стоит отправлять - в ответ не будет ничего совершенно. Это я Вам как тот, кто в 1С обращался, заявляю. А уж если кто-то что-то в скуле не дай Бог поправил - тут в ответ, конечно, есть риск получить кучу г-на от 1С. Но это здесь - единственный риск, при том хоть какая-то реакция уже лучше, чем вообще никакой.
32. Sergey.Noskov 1125 15.07.16 19:16 Сейчас в теме
(25) starik-2005, так в том то и дело, что не помогут, да еще и вы им скажите "мы тут эмулятор ключа поставили, чет он сломался" (были и такие случаи)
PS А по поводу помощи от 1С - помогают, да долго, да не всем, но помогают. Хотите работающую техническую поддержку от 1С - заключайте договор ЦКТП.
33. starik-2005 2021 16.07.16 14:25 Сейчас в теме
(32) Sergey.Noskov, ну или договор, или свои специалисты, которые могут разрулить подобные проблемы. Все зависит от стоимости решения и требований к SLA поддержки. 1С вообще для 100% проектов, в которых SLA - час на решение проблем неработоспособности базы, не подходит. ибо они однозначно за час даже отреагировать не успеют. Они делают ресурсоемкий низкопроизводительный продукт, который содержит в себе достаточно много ошибок, но при этом стоимость разработчика для 1С ниже большинства других проектов, а количество каркасов решений, с которых начать творить свое - несоизмеримо больше, чем у конкурентов. Вот на этом они и живут, и жить будут. Просто если взялась контора за 24/7, объявив для своих клиентов данный уровень обслуживания, то она должна обеспечить уровень поддержки своими силами и не уповать на 1С в принципе. При таком подходе лицензионным соглашением в плане невлияния на данные путем прямых запросов к SQL можно подтереться, ибо все-равно 1С НЕСПОСОБНА предложить необходимый уровень обслуживания. Поэтому гарантии - это наличие бэкапа и специалистов. способных в самом худшем случае развернуть его в течение часа.

Вообще, лицензионное соглашение только обещает рассмотреть баги при отсутствии влияния на таблицы внешних по отношению к 1С факторов. То есть они лишь рассмотрят баги и воткнут их в багтреккер для последующего фикса - и не более. Если вы что-то делали в SQL и сообщаете в 1С о баге, то такой баг в багтреккер 1С не попадет. Вот и вся разница. А то, что придет мальчик из 1С и починит вам базу - это каким же надо быть идиотом, чтобы в это поверить. Мальчик не придет, и девочка тоже, никто вам ничего не будет чинить, ибо они 200% скажут, что у них ваша ошибка не повторяется, поэтому проблема в: железе, стороннем ПО, положении звезд и т.д. (но только если докажете, что не в железе и не в стороннем ПО, что в принципе невозможно доказать).
34. Sergey.Noskov 1125 18.07.16 13:26 Сейчас в теме
(33) starik-2005,
Просто если взялась контора за 24/7, объявив для своих клиентов данный уровень обслуживания, то она должна обеспечить уровень поддержки своими силами и не уповать на 1С в принципе

вот этим мы и занимаемся.
С аргументами согласен - проблемы есть и с поддержкой и с продуктами. Но глобально это общая проблема рынка - хочешь быстро решать вопросы - нанимай своих спецов, а не рассчитывай на поддержку. Кто из вендоров обеспечивает SLA в течении часа и не косячит в продуктах? Проблемы есть у всех, мы когда по результатам 2х дневнего анализа проблемы с высокой утилизацией процов, получили от MS ответ "в вашей базе очень много запросов", мы тож долго смеялись и такая поддержка стоит не соизмеримо больше подписки на диск ИТС.

Вообще мы отвлеклись от сути статьи... Про проблемы, особенно наболевшие, можно долго дискутировать))
26. Dach 293 15.07.16 14:00 Сейчас в теме
(24) Sergey.Noskov, так как методика основана на в первую очередь создании бэкапа - надеюсь, что воплей "памахите, хулюганы зрения лишают!!!" не будет )))))

Ну понятно, что скорость запросов может упасть. Каждый конкретный случай надо рассматривать отдельно. Кому-то критично не допустить простоя в 30 часов на обновление, кому то критично чтобы запросы не тормозили. В конце концов, ничего не мешает сделать в таблице колонку с возможностью содержания NULL, дать возможность пользователям работать. Затем создать новую таблицу, скопировав структуру таблицы-источника и убрав там NULL в новой колонке. И потихоньку перекачивать данные из одной таблицы в другую. Когда полностью перекачаются - изменить название на название исходной таблицу и вуаля. Подход рабочий, проверено в публикации, указанной в (7)
27. МихаилМ 15.07.16 15:31 Сейчас в теме
откройте для себя ddl триггеры. напишите покет методов обновления исходной таблицы новыми полями из *NG, подмены исходных таблиц "однострочными пыстышками" для уменьшения времени копирования в NG таблицы и отмены удаления. и никакой длительной реструктуризации . и "деревенских" способов. возможно еще потребуется заполнение полей значениями по умолчанию. "однострочные пустышки" нужны, чтобы создавались *NG таблицы .
28. Dach 293 15.07.16 15:50 Сейчас в теме
(27) МихаилМ, какое событие DDL Вы предлагаете использовать в качестве инициализатора триггера? Вы знаете как выполняется типовая реструктуризация 1С? Создается новая таблица с новой структурой (добавленными вновь колонками) и данные копируются из старой таблицы в новую.

Так какое событие назначить триггеру? CREATE TABLE? А что, если это просто добавление таблицы нового объекта метаданных? Да, и как узнать внутри триггера - какая таблица - источник, где производить "обновление полей" из ng table?

Вы бы лучше написали свою статью, с блекджеком и балеринами, а мы почитаем и поставим Вам лайки-звездочки. А пока что звучит не конструктивно, уж извините!
Silenser; +1 Ответить
29. МихаилМ 15.07.16 17:02 Сейчас в теме
по конечно для события creat table и анализ суфикса . как проходит реструктуризация - знаю. по событию delete table подменяем обратно таблицу пустышку. узнать - анализируя имя таблицы *ng.
30. Dach 293 15.07.16 17:32 Сейчас в теме
(29) МихаилМ, как узнать, что create table - это create table в результате реструктуризации, а не в результате, что разработчик добавил метаданное в конфигурацию? И аналогично с delete - это реструктуризация удаляет или разработчик? Опять-таки, что такого особенного будет делать триггер, в отличие от того, что изложено в статье и в комментах? По моему, ему придется делать все тоже самое: очистка, добавление колонки, переименование. Ну и возвращаемся к вопросу, надо ли автоматизировать этот процесс. Кому надо - тот напишет себе процедуру или триггер, как товарищ из (17), кому не надо - тот один раз и руками все сделает.
31. МихаилМ 15.07.16 18:13 Сейчас в теме
(30) анализ имени таблицы на присутствие суффикса "ng" укызвает о реструктуризации. кому надо тот сделает. мой пост - провокация для пытливых умов, коими индустрия 1с небогата.
36. Roman_SE 8 01.02.18 18:34 Сейчас в теме
По реструктуризации не посдкажете, 1с таблицы NG поочередно записывает или ждет пока все создаст? Если у меня реструктуризация не может завершиться, ошибок по базе нет, можно ее обратно откатить просто удалив таблицы и накатив старую конфу или не получится уже если она по половине документов прошлась? Виснет на регистрах у меня...
Оставьте свое сообщение

См. также

Анализ взаимоблокировок

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad) Технологический журнал

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

20.03.2020    1950    vasilev2015    21       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

Данный онлайн-курс предусматривает изучение процессов DevOps, их применение при разработке на платформе 1С. В результате прохождения онлайн-курса вы сможете: настроить ПО необходимое для проведения проверок и тестирования, создавать сценарии тестирования и объединять их в комплексные процессы, создавать скрипты для автоматизации процессов DevOps.

12000 рублей

Многопоточность

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Производительность и оптимизация (HighLoad)

Увеличиваем скорость загрузки данных в 20 раз. Как следует использовать многопоточность и готовый модуль для внедрения.

18.03.2020    2637    kaliuzhnyi    42       

Время учиться: до 3 апреля скидки на курсы до 40%! Промо

Для тех, кто решил провести самоизоляцию с пользой, Инфостарт запускает акцию «Время учиться». С 30 марта до 3 апреля 2020 года наши курсы и видеозаписи докладов INFOSTART EVENT 2019 INCEPTION продаются со скидкой!

Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах

Статья Программист Нет файла v8::Запросы Бесплатно (free) Производительность и оптимизация (HighLoad)

Проблема быстродействия 1С напрямую зависит от производительности запросов. Но как понять механику работы СУБД с помощью плана запроса? Андрей Овсянкин и Никита Грызлов на конференции Infostart Event 2019 Inception подробно рассмотрели алгоритм работы с планом запроса СУБД PostgreSQL, полученным из технологического журнала, и рассказали, на что обратить внимание, чтобы оптимизировать работу системы.

17.02.2020    5324    Evil Beaver    13       

Оптимизатор запросов. Вторая часть

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

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

23.01.2020    4026    darkdan77    59       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Улучшаем производительность 1С. Рекомендации

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Каждый уважаемый разработчик 1С сталкивался или столкнется с вопросом производительности высоконагруженных систем. В статье агрегирован основной набор рекомендаций, который позволит повысить производительность системы. Эти рекомендации должны быть просто must have по определению.

23.01.2020    5317    Kaval88    26       

Мониторим производительность с помощью 1С RAS

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Инструментарий разработчика Производительность и оптимизация (HighLoad)

Подключаемся и анализируем данные через 1С RAS. Необходимо выполнить 5 пунктов и серьезный инструмент мониторинга будет у вас в руках.

19.12.2019    6509    ivanov660    16       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Весёлые картинки о работе Performance Monitor на Windows Server 2016 Std по мотивам расследования потери производительности на базе 1С

Статья Системный администратор Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

Данная публикация посвящена одной особенности Performance Monitor на Windows Server 2016 Std. Как понимать графики Performance Monitor на Windows Server 2016 Std при расследовании проблем в работе 1С.

22.10.2019    4710    EugeneSemyonov    11       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Мониторинг высоконагруженной системы

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Высоконагруженной системе (более 8000 клиентских сессий) мониторинг необходим. Про опыт использования инструментов для мониторинга – самописной системы информирования, написанной на C#, и конфигурации «Центр контроля качества» в связке с системой отображения данных Grafana, на конференции Infostart Event 2018 Education рассказал Олег Репников.

13.09.2019    6627    Repich    5       

Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) Администрирование данных 1С Zabbix

Описанные в данном опусе механизмы ни в коей мере не противопоставляются тому, что реализует КИП от 1С или какие-либо другие инструменты (решения)! Это всего лишь еще один взгляд на "проблему", который может быть полезен в некоторых ситуациях.

10.09.2019    13648    Sloth    11       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Анализ производительности APDEX

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

31.08.2019    7159    176    YPermitin    7       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

Неочевидные проблемы производительности: важность системного подхода при анализе

Статья Программист Нет файла v8 Россия MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Часто программисты и 1С-ники сталкиваются с совершенно необъяснимыми на первый взгляд проблемами. Но это потому, что их внимание направлено только на один сегмент системы, а не на всю систему полностью. О том, почему нужно стараться смотреть на ситуацию комплексно, рассказал специалист по производительности компании SOFTPOINT Александр Денисов.

19.07.2019    6802    Филин    12       

Ловля блокировок на связке "Microsoft SQL server - 1С"

Статья Системный администратор Программист Нет файла v8 v8::blocking MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    6834    fhqhelp    0       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 20 апреля по 15 мая 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Решение задач на 1С:Специалист Разработка

В этой статье приведен пример неочевидной "оптимизации" запроса, которая противоречит всем правилам, описанным в книгах для подготовки к сертификации "1С:Эксперт по технологическим вопросам", а также преподаваемым на курсах подготовки экспертов.

02.07.2019    8729    igordynets    119       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Ускорение чтения правил обмена в УПП 1.3 в 20 раз!

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Способ оптимизации чтения правил обмена конвертации данных. Может понадобиться при большом размере правил и высокой периодичности обмена.

27.06.2019    7660    YPermitin    16       

Хотите снизить нагрузку на процессор сервера в 2 раза?

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

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

27.06.2019    7047    Дмитрий74Чел    6       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Непридуманные истории по оптимизации. История 1

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Первая статья из планируемого цикла об оптимизации приложений на базе 1С. Без теории. Одна практика.

13.06.2019    10300    Repich    117       

Оптимизация: неэффективные запросы

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Разработка

В большинстве случаев основной причиной медленной работы системы при многопользовательском режиме работы является блокировка данных СУБД (говорим про клиент-серверную версию). Блокировка - это не есть хорошо или плохо, это жизненно необходимая вещь при построении прикладной логики работы системы. Но блокировки таблиц, записей могут быть как вполне законными, так и далеко не всегда оправданными в каждой конкретной ситуации. Одной из самых распространенных причин неоптимальной блокировки ресурсов является некорректное написание запросов.

13.06.2019    4586    slayer-ekb    10       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Производительность и оптимизация (HighLoad)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    18525    dmurk    144       

За 5 шагов добавляем мониторинг счетчиков производительности серверов MS SQL и 1С

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Статистика базы данных Производительность и оптимизация (HighLoad)

Мы расскажем и покажем, как добавить данные счетчиков производительности серверов 1С и MS SQL в нашу базу мониторинга за 15 минут. Приведем список наиболее важных из них, опишем основные особенности.

28.05.2019    13895    ivanov660    9       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для решения задач бухгалтерского учета. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Бухгалтерия” и прочих прикладных решений, в которых реализованы соответствующие механизмы для автоматизации бухгалтерских задач.

4900 рублей

Не думать о секундах свысока...

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Несколько примеров оптимизации типовой конфигурации УТ11. Описанные приемы подходят для многих других конфигураций.

21.05.2019    6586    vasilev2015    21       

Альтернативная стратегия управления блокировками

Статья Программист Архив с данными v8 v8::blocking 1cv8.cf Россия MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Данная публикация освещает одну из альтернативных стратегий блокирования данных на уровне MS SQL Server, которая недоступна средствами 1С, но может быть весьма полезной. Разбирается практический пример.

20.05.2019    5826    zhichkin    15