Пятница, 17.05.2024, 02:35
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Основной » Прочее » Удаление объектов с контролем ссылок (Пожелание по функционалу)
Удаление объектов с контролем ссылок
sweep4Дата: Понедельник, 23.08.2021, 18:01 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 17
Статус: Оффлайн
Исходные данные:

1) есть Очень Большая База
2) есть много активных пользователей (~1к)
3) очень тяжёлые RLS
4) и множество других недостатков и особенностей, присущих таким базам

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

При этом, база в работе практически 24x7, нет возможности проведения процедур удаления в какие-то временные окна в монопольном режиме, процесс удаления не укладывается в эти временные отрезки. Поэтому работу по чистке базы от помеченных на удаление производят в рабочее время, параллельно с работающими пользователями.

Типовая обработка удаления помеченных очень сильно нагружает базу и мешает работе пользователей. Дело доходит до серьёзных тормозов и фризов. Поиск помеченных в ИР, в принципе, тоже сильно нагружает базу, т.к. основные тормоза вызываются платформенной функцией поиска ссылок на объект - и чем в большем количестве объектов конфигурации присутствует искомая ссылка, тем сильнее тормоза. Тормозит и процедура удаления объекта - в монопольном режиме платформенной функцией, насколько я понимаю, при удалении тоже делается повторный поиск ссылок на каждую удаляемую ссылку, а не в монопольном точно не скажу, но если не в режиме загрузки - тоже должен тормозить. В общем, в целом всё очень печально с удалением.

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

Видение - в инструменте удаления помеченных в настройках ввести два параметра - величину порции удаляемых данных, и время задержки между порциями в секундах. Использовать при поиске/контроле ссылок и при финальном удалении. Возможно ?
 
tormozitДата: Понедельник, 23.08.2021, 19:48 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Инструмент ищет помеченные на удаление действительно только платформенной функцией (кнопка Заполнить). Но это делается только интерактивно и потому очень редко. Поэтому нагрузка от этой операции не играет большой роли. При большой желании пользователь может кучей других способов заполнить список кандидатов, например запросом или через подбор из формы списка.

Инструмент использует по умолчанию собственный поиск ссылок на кандидаты. Стандартный (платформенный) поиск ссылок включается одноименным флажком. В собственном поиске ссылок конечно возможна вставка паузы между запросами к разным таблицам БД, но она очень сильно увеличит длительность процесса.

При удалении объектов поиск ссылок не производится инструментом и платформой независимо от монопольного режима. Однако платформа при этом удаляет сильно связанные данные в одной транзакции:
1. дочерние элементы справочника рекурсивно
2. подчиненные элементы справочников рекурсивно
3. ведомые регистры сведений (по ведущему измерению)
4. движения документов
А также платформа при этом добавляет, обновляет строки таблиц регистрации изменений.
Кроме того еще прикладной код может что то делать дополнительно.

Рекомендую с помощью техножурнала по долгим запросам (более 10 секунд) выявить, какие стадии процесс контроля и удаления и на каких таблицах БД приводят к наибольшей нагрузке. С этой информацией мы сможем быстрее ослабить проблему.
Рекомендую отладчиком прошагать контроль и удаление малой группы каких то частых типов объектов. Возможно уже там станет понятно, на каких этапах идет наибольшая нагрузка. Не лишним здесь будет применить запись трассы СУБД https://www.hostedredmine.com/issues/926150 .

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

Потенциальный параметр "Размер порции кандидатов" будет иногда влиять на пиковое потребление памяти процессом 1С. Заметного влияния на нагрузку на базу он не даст. А вот его уменьшение может существенно увеличить общую длительность и главное - снизить успешность процесса. Поэтому такой параметр добавлять кажется плохой идеей.
 
sweep4Дата: Вторник, 24.08.2021, 08:07 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 17
Статус: Оффлайн
Здесь суть как раз в приоритетности снижения нагрузки против общей длительности операции. Задержки нужны для того, чтобы в их моменты разгружалась база, обрабатывая накопившуюся очередь запросов у пользователей. Худо-бедно это позволит сосуществовать  работающим пользователям и админам, которые удаляют данные. Поэтому лучше долго и понемногу удалять, чем вообще никак, т.к. помеченные на удаление сейчас просто накапливаются, не можем удалить, не создавая проблемы пользователям в работе. Внесение задержки - это ведь опция, которую можно включить только тем, кому это нужно, а так удаление может работать в своём обычном режиме, как сейчас, без задержек.

По размеру порции я тоже думал, но можно ведь и так сделать - размер порции считать по основным выбранным данным, например, выбрали порцию 10 документов, а связанные данные пусть тоже включаются в удаляемый набор, чтобы удалить в одной транзакции всю пачку, так тоже годится. Это в любом случае меньше, чем включить в порцию 1000 документов + связанные данные.

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

Самое печальное, что на копии базы на тестовом сервере это не выявить - без пользователей и создаваемой ими нагрузки удаление происходит ровно и без помех. На рабочей же сразу начинаются сложности. Например, 100 выбранных на удаление документов уже не могут удалиться, отваливаются на ожиданиях, а вот если выбрать 5-10 документов в тех же условиях - это срабатывает.
 
tormozitДата: Вторник, 24.08.2021, 08:33 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Получается пауза тебе нужна только между удалениями объектов, т.к. только там блокируются таблицы.
 
sweep4Дата: Вторник, 24.08.2021, 08:50 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 17
Статус: Оффлайн
Цитата tormozit ()
Получается пауза тебе нужно именно между удалениями объектов, т.к. только там блокируются таблицы.

В основном да. Ну и размер порции тоже, как оказалось на практике, в моей ситуации имеет значение, чем меньше, тем больше вероятности, что не застрянет на блокировках.
 
tormozitДата: Вторник, 24.08.2021, 09:22 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Создал задачу https://www.hostedredmine.com/issues/932361
 
tormozitДата: Воскресенье, 29.08.2021, 22:07 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Реализовано в 6.07.1
Хотелось бы получить инфу по эффекту в твоей базе.
 
tormozitДата: Суббота, 04.09.2021, 08:14 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Удалось попробовать?
 
sweep4Дата: Вторник, 07.09.2021, 18:10 | Сообщение # 9
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 17
Статус: Оффлайн
Пока ещё нет, но админов боевой базы проинформировал. На днях на тестовой базе тоже попробую.

Добавлено (14.09.2021, 09:26)
---------------------------------------------
Проверяю на тестовой базе, хочу уточнить - пауза делается между удалениями каждого объекта ? Или между порциями по 1000 ?

 
tormozitДата: Среда, 15.09.2021, 08:36 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 6201
Репутация: 159
Статус: Оффлайн
Выше же писал "между удалениями объектов". В заголовке задачи тоже написано "между удалениями объектов". Очень странно читать такой вопрос.
 
sweep4Дата: Среда, 15.09.2021, 09:57 | Сообщение # 11
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 17
Статус: Оффлайн
Не связал "между удалением объектов" и "между порциями", бывает ) Но так тоже нормально. Т.к. к рабочей базе доступа нет, сделал относительно эмпирическую проверку на тестовом сервере разработки. Если разработчик сильно нагружает любую из тестовых баз, у других разработчиков на этом же сервере становятся заметны тормоза на их тестовых базах. Исходя из этого наблюдения, сделал пару прогонов на тестовом сервере массового удаления пары тысяч строк из справочника Партнеры. Задержку ставил сначала на 10 сек, потом на 5 сек. От коллег не поступало вопросов в чате, кто нагрузил тестовый сервер, так что эмпирический тест можно считать успешным )

Для рабочих баз информацию передал заинтересованным, если поступит какая-нибудь информация, отпишусь.
 
Форум » Основной » Прочее » Удаление объектов с контролем ссылок (Пожелание по функционалу)
  • Страница 1 из 1
  • 1
Поиск: