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

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

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

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

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

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

См. также

Комментарии
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) 36 30.11.09 18:21 Сейчас в теме
(2) На базе 1 милион записей запрос выполнился на дохлом ноутбуке в течении 10 сек. :), из базы тянуться только ссылки, что не затратно. На действительно больших объемах конечно есть смысл оптимизировать, и выбирать объекты пачками, а не одним запросом. Вытянув ссылки на весь милион объектов клиентская 1Ска в процессах занимала 300 мб оперативной памяти... Поэтому не возникало задачи, что то оптимизировать, но в близжайшее время как раз займусь этим, т.к. база в скором времени планирует увеличиваться...

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

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

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

Пример:
Открываем любой документ, для которого в настройках версионирования стоит "Версионировать". 5 раз нажимаем кнопку "Записать", открываем историю изменения объектов и смотрим. Появилось 5 новых версий. Если посмотреть отчет по изменениям этих версий, он покажет что версии идентичны. Соответственно - эти записи нам не нужны...
9. Eugeneer (Eugeneer) 02.12.09 14:59 Сейчас в теме
(8) +100 а еще есть восстановление последовательсноти (у меня например автоматом каждый день по регл заданию определеяет и восстанавливает) по этим записям я чуть не офигел когда рег посмотрел. по 20-30 версий было на один док. а их несколько тысяч в день.
10. hanio (hanio) 46 02.12.09 22:04 Сейчас в теме
Хочу с нового года включить версионирование но тут вопрос у меня УПП узе 1.4 Гб в файловом варианте, подскажите сколько на вскидку юедет записей и стоит ли перелазить в SQL?
11. Андрей Павлов (mrApachik) 36 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) 36 03.12.09 14:14 Сейчас в теме
Эта схема уже работает на реальной базе? Я думаю, что будут ощутимые потери производительности. Сначала нужно получить версию текущего объекта, записать её на диск (т.к. сейчас при версионировании используются объекты, которые не умеют работать в памяти), что по потери скорости уже практически равно созданию обычной новой версии. Потом получить предыдущую версию, проверить не сжата ли она фоновым заданием, если сжата, то "расжимаем".
И только тогда сравниваем версии... В большинстве случаев это очень неэффективно.
В версионировании узкое место - это жесткий диск, если все операции выполнять в памяти, думаю можно в разы ускорить работу. Для этого можно попробовать писать в ХранилищеЗначения не ДвоичныеДанные, а например внутреннее строковое представление объекта. Правда не знаю, насколько это оправдано. Нужно проверять...
15. Ярослав Радкевич (WKBAPKA) 201 03.12.09 23:40 Сейчас в теме
просветите плж., что это за подсистема такая?
iceflash; +1 Ответить
16. Денис Яковлев (iceflash) 4 04.12.09 16:21 Сейчас в теме
Автор видимо имеет ввиду стандартное решение от 1С в типовой конфигурации, например тут есть выгруженная подсистема http://infostart.ru/public/61706/
17. Вадим Туманов (Wolfis) 4 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) 83 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млн записей.
Оставьте свое сообщение