|
v7: Очень медленно удаляются документы из базы 1С 7.7 на SQL2000 | ☑ | ||
---|---|---|---|---|
0
niks77
27.06.13
✎
18:40
|
Что можно оптимизировать? А то получается, что трое суток понадобится. Оно может и хорошо, но хочется оптимизировать алгоритм...
Процедура Сформировать() Док=СоздатьОбъект("Документ"); Док.ВыбратьДокументы(ДатаНач,ДатаКон); Пока (Док.ПолучитьДокумент()=1) Цикл Сообщить(Строка(Док.НомерДок)+" "+Док.ДатаДок); Док.СделатьНеПроведенным(); Док.Удалить(1); КонецЦикла; КонецПроцедуры |
|||
1
Fragster
гуру
27.06.13
✎
18:42
|
(0) 1с++ и ReconnectNative каждые 10 документов
|
|||
2
Fragster
гуру
27.06.13
✎
18:42
|
а если непосредственное удаление - то вообще прямым запросом грохнуть все документы и движения, пересчитать итоги.
|
|||
3
Fragster
гуру
27.06.13
✎
18:43
|
||||
4
niks77
27.06.13
✎
19:03
|
В прямых запросах я не силен, но когда-то надо начинать...
|
|||
5
palpetrovich
27.06.13
✎
19:05
|
выгрузить в файловую, удалить "лишние" файлы - все остальные загрузить обратно ..ну или "рядом" :)
|
|||
6
Fragster
гуру
27.06.13
✎
19:05
|
(5) там по дате
|
|||
7
palpetrovich
27.06.13
✎
19:09
|
(6) не факт ...или, ой, доки с 2001-го по 2013, а удалить надо с 2005-го по 2007-й?
|
|||
8
Fragster
гуру
27.06.13
✎
19:11
|
(7) ну так про (что-нибудь подобное) "свертку базы до 3-х последних лет" слышал когда-нибудь?
|
|||
9
МихаилМ
27.06.13
✎
19:16
|
в транзакции по 500-1000 документов.
реконнектнэйтив через 1000-2000 документов. |
|||
10
palpetrovich
27.06.13
✎
19:17
|
дык, давно живу, много чего слышал ..автору то пофик по-ходу..
|
|||
11
niks77
27.06.13
✎
19:28
|
2(10) дай Бог и еще прожить, а автор решил SQL поизучать...
|
|||
12
МихаилМ
27.06.13
✎
19:49
|
зачит лет 10 автора нас не побеспокоит, коли за 5 лет не разобрался с 1с77
|
|||
13
niks77
27.06.13
✎
20:34
|
2(12) В течении 10 лет, чтобы база не простаивала решил немного ускорить процесс:
Процедура Сформировать() Док=СоздатьОбъект("Документ"); УстановитьТАна(ДатаТА); НачатьТранзакцию(); Док.ВыбратьДокументы(ДатаНач,ДатаКон); i=0; Пока (Док.ПолучитьДокумент()=1) Цикл Сообщить(Строка(Док.НомерДок)+" "+Док.ДатаДок); Док.СделатьНеПроведенным(); Док.Удалить(1); i=i+1; Если (i>=200) Тогда ЗафиксироватьТранзакцию(); i=0; НачатьТранзакцию(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
14
Fragster
гуру
27.06.13
✎
20:38
|
А я всегда делал
Если Сч % 100 = 0 Тогда Состояние("" + Сч + "/" + Всего); КонецЕсли; Чтобы счетчик не обнулять |
|||
15
Обработка
27.06.13
✎
20:59
|
(0) А разве вам наплевать что могут быть ссылки на документы?
если наплевать то можно прям в скуле грохнуть любые доки за любой период. Букавально за 10 мин. Конечно при этом надо удалять и его движения тоже. |
|||
16
Обработка
27.06.13
✎
21:02
|
(0) Возьми куски кода от стандартных обработок свертки.
1. Делаешь ввод остаков 2. Удаление движений у доков и потом сами доки можно удалять хоть целый месяц не спеша. Я сейчас в базе 81 не спеша удаляю помечение доки после свертки. Ибо база больша и комп слабый. |
|||
17
Эльниньо
27.06.13
✎
21:03
|
ТА на 1-й удаляемый док поставь.
|
|||
18
МихаилМ
27.06.13
✎
21:08
|
(16)
если база болшая - значит sql -> удалите прямым запросом |
|||
19
niks77
27.06.13
✎
21:10
|
2(15) В данном случае можно смело удалять...
2(17) Так и поставил... 2(18) Прямые запросы еще не обкатал... |
|||
20
niks77
27.06.13
✎
21:26
|
2(14) можно и так - такой код чуть-чуть быстрее работать будет. Fragster, благодарю за помощь.
Все доки за два года уже обрезал - разница по производительности между первоначальным кодом и поздним раз в 40-50... |
|||
21
Lionee
27.06.13
✎
21:54
|
Док.СделатьНеПроведенным();
зачем? сразу Док.Удалить(1); |
|||
22
niks77
27.06.13
✎
21:57
|
2(21) А "хвосты" в базе никакие не "зависнут"?
|
|||
23
palpetrovich
27.06.13
✎
22:27
|
(22) однозначено "зависнут", при любом выбранном варианте ...да и вообще - основная работа при обрезка базы начинается после обрезки (цы) я, прямо ща :)
|
|||
24
Lionee
27.06.13
✎
23:06
|
(22) у тебя время тратится на распроведение
|
|||
25
Lionee
27.06.13
✎
23:06
|
хвоста канечно
|
|||
26
Lionee
27.06.13
✎
23:06
|
хвосты
|
|||
27
Злой Бобр
28.06.13
✎
03:47
|
(0) Я надеюсь вы понимаете что удаляете?.. Ну и про бекап тоже незабыли?..
Если за 5 лет неделали такого - может проще кого-то нанять? Хотя одной упавшей базой больше или меньше - особо ситуацию неизменит. |
|||
28
Dolly_EV
28.06.13
✎
07:29
|
(0) Вот: http://infostart.ru/public/59521/
вот она же, немного подправленная (есть возможность удалить только движения, оставив сами доки): http://rghost.ru/47067729 после процедуры пересчитать регистры вот этим: http://www.dev.citykirov.ru/dlcount.php?url=http://dev.citykirov.ru/APSetup.zip на все-про-все в базе ~30Гб - мин.15-20 |
|||
29
Dolly_EV
28.06.13
✎
07:33
|
(0) +(28) Ну и как бэ .. стоит на копии попробовать))
|
|||
30
ProxyInspector
28.06.13
✎
07:51
|
0. Переносишь остатки и периодические реквизиты
1. ТА устанавливаешь на первый документ 2. С помощью 1С++ запросами помечаешь на удаление документы и удаляешь движения помеченных на удаление документов 3. Восстанавливаешь ТА 4. Не спеша удаляешь помеченные на удаления документы У нас база порядка 17 GB и 2 млн документов. По времени свертка занимает, на рабочей станции: 0 - перенос остатков - 3 мин 1 - ТА на первый документ - 1 мин 2 - пометка на удаление - 10 мин 3 - восстановление ТА - 5 мин 4 - удаление документов без ссылок ( 1 млн док) - 5 часов. Это можно делать и не монопольно |
|||
31
Mikeware
28.06.13
✎
08:06
|
(30) Еще проще:
фиксируешь остатки по регистрам спецдокументом (а-ля двигатель регистров) прямой записью. Удаляешь все движения по регистрам до даты. Удаляешь документы, на которые нет ссылок после даты (и в периодике) чистишь периодику -------- все это запихивается в планировщик, и отрабатывает каждый месяц в часы наименьшей нагрузки (когда работает 2-3-4 человека), оставляя в базе последние 3 года. |
|||
32
Андрей_Андреич
naïve
28.06.13
✎
08:08
|
А непосредственное удаление в цикле выборку не сбивает?
|
|||
33
КонецЦикла
28.06.13
✎
08:20
|
(32) Выборка объектов не сбивается
|
|||
34
vde69
28.06.13
✎
08:25
|
удаляй документы в обратном порядке, от самого последнего к первому.
|
|||
35
Злопчинский
28.06.13
✎
19:36
|
(31) а что вы пихаете в реквизиты регистров при проведении по регистрам универсальным двигателем..?
|
|||
36
Mikeware
28.06.13
✎
19:40
|
остатки. в принципе, можно ничего не пихать, просто оставлять остатки в регистре. Но тогда есть шанс по.рить регистр случайным пересчетом, что я однажды лет пяток назад сделал...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |