gifts2017

Свертка версий объектов

Опубликовал Андрей Павлов (mrApachik) в раздел Обработки - Свертка базы

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

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

Скачать файлы

Наименование Файл Версия Размер
Файл обработки 250
.epf 7,62Kb
30.11.09
250
.epf 7,62Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Eugeneer (Eugeneer) 30.11.09 17:33
Производительность какая?
Судя по коду не совсем может подойти. Недавно был озадачей этой проблеммой. Записей было несколько миллионов.
2. Eugeneer (Eugeneer) 30.11.09 17:36
просто не очень хорошая идея делать запрос по всему регистру и тянуть его на клиента в таблицу. 1С зависнет наглухо.
Даже прямой очисткой регистра одним методом выполнялось несколько часов.
3. Eugeneer (Eugeneer) 30.11.09 17:37
а чтобы лишних записей нет лучше в модуле подписки прописать под какими условиями вообще версии записывать.
4. Eugeneer (Eugeneer) 30.11.09 17:38
ну и избавлятся от лишних перепроведений и от записей которые не вызывают изменения , плюс делаются роботом при перепроводении (восстановлении последовательности)
5. Eugeneer (Eugeneer) 30.11.09 17:40
За труд конечно плюс. Оптимизировать есть куда. Обработка нужная.
6. Андрей Павлов (mrApachik) 30.11.09 18:21
(2) На базе 1 милион записей запрос выполнился на дохлом ноутбуке в течении 10 сек. :), из базы тянуться только ссылки, что не затратно. На действительно больших объемах конечно есть смысл оптимизировать, и выбирать объекты пачками, а не одним запросом. Вытянув ссылки на весь милион объектов клиентская 1Ска в процессах занимала 300 мб оперативной памяти... Поэтому не возникало задачи, что то оптимизировать, но в близжайшее время как раз займусь этим, т.к. база в скором времени планирует увеличиваться...

(3) В этом случае, возникают блокировки :(

(4) Идет внедрение, поэтому от таких ситуаций, пока не избавится :)

(5) Спасибо, будем думать над развитием.
Eugeneer; +1 Ответить
7. Михаил Зыков (ZyMik) 02.12.09 11:43
Автору: Поясните понятие "Лишние записи"? Это записи, не хранящие изменений в самом объекте?
8. Андрей Павлов (mrApachik) 02.12.09 14:18
Запись в регистре версий сама по себе хранит, не изменения, а полную копию реквизитного состава объекта, и "лишними" в данном случае считаются те записи, в которых эти копии равны, разумеется по порядку нумерации.

Пример:
Открываем любой документ, для которого в настройках версионирования стоит "Версионировать". 5 раз нажимаем кнопку "Записать", открываем историю изменения объектов и смотрим. Появилось 5 новых версий. Если посмотреть отчет по изменениям этих версий, он покажет что версии идентичны. Соответственно - эти записи нам не нужны...
9. Eugeneer (Eugeneer) 02.12.09 14:59
(8) +100 а еще есть восстановление последовательсноти (у меня например автоматом каждый день по регл заданию определеяет и восстанавливает) по этим записям я чуть не офигел когда рег посмотрел. по 20-30 версий было на один док. а их несколько тысяч в день.
10. hanio (hanio) 02.12.09 22:04
Хочу с нового года включить версионирование но тут вопрос у меня УПП узе 1.4 Гб в файловом варианте, подскажите сколько на вскидку юедет записей и стоит ли перелазить в SQL?
11. Андрей Павлов (mrApachik) 03.12.09 12:43
(9) Вот вот :) Хорошо бы всё таки организовать проверку версий в реальном времени при записи объектов, но честно говоря как это реализовать с незначительной потерей производительности и отсутсвием конфликтов блокировок, пока не знаю...

(10) Записей будет столько, сколько раз будут записывать версионируемые объекты (изначально 0). А насчет SQL... Моё мнение: если потребность в переходе на SQL выше, чем его стоимость, то конечно стоит!
12. Eugeneer (Eugeneer) 03.12.09 12:57
(11) ничего не понял в чем проблема. Заходим в типовую подписку, ставим вначале проверку на юзера и условия продолжения модуля, если по условиям запись делать не надо просто возврат ставим и всё.
13. Eugeneer (Eugeneer) 03.12.09 12:58
Можно даже сделать доп регистр сведений для настроек, и изменить процедуру подписки на запись версионирования по этим условиям.
Вот тебе и ограничения.
14. Андрей Павлов (mrApachik) 03.12.09 14:14
Эта схема уже работает на реальной базе? Я думаю, что будут ощутимые потери производительности. Сначала нужно получить версию текущего объекта, записать её на диск (т.к. сейчас при версионировании используются объекты, которые не умеют работать в памяти), что по потери скорости уже практически равно созданию обычной новой версии. Потом получить предыдущую версию, проверить не сжата ли она фоновым заданием, если сжата, то "расжимаем".
И только тогда сравниваем версии... В большинстве случаев это очень неэффективно.
В версионировании узкое место - это жесткий диск, если все операции выполнять в памяти, думаю можно в разы ускорить работу. Для этого можно попробовать писать в ХранилищеЗначения не ДвоичныеДанные, а например внутреннее строковое представление объекта. Правда не знаю, насколько это оправдано. Нужно проверять...
15. Ярослав Радкевич (WKBAPKA) 03.12.09 23:40
просветите плж., что это за подсистема такая?
iceflash; +1 Ответить
16. Денис Яковлев (iceflash) 04.12.09 16:21
Автор видимо имеет ввиду стандартное решение от 1С в типовой конфигурации, например тут есть выгруженная подсистема http://infostart.ru/public/61706/
17. Wolfis (Wolfis) 24.03.10 10:10
Возможно ли сделать сначало бэкап объектов а затем их уже чистить???
18. Михаил Зыков (ZyMik) 27.04.10 07:05
У меня не может прошерстить 78 тыс объектов. вылетает. Объем памяти распухает до 1.5 гиров и трындец. Нужно не держать все в памяти, а делить на порции.
19. Petr (sevipa) 10.09.11 01:07
вылетает с ошибкой "не хватает памяти"
20. Andre Skorik (SkorikA) 14.12.11 06:54
Спасибо:) Работает. Регистр почти в 5 миллионов записей удалось сократить на треть. В качестве пожелания разработчику: если бы еще бы можно было настраивать отборы (например документы за определенный месяц) чтобы была возможность запускать обработку частями - было бы вообще идеально. А то в том случае, когда количество обрабатываемых документов приближается к паре миллионов дело может затянуться:)
21. Vladislav Chaplygin (tchvlad) 28.02.12 16:30
Отличная нужная обработка. Такая необходима, спасибо.
22. Alexei Kalachev (kalach2002) 16.06.12 19:48
Спасибо.
Срезало 2/3 из 1.5млн записей.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа