Имя: Пароль:
1C
1C 7.7
v7: Удалить 800 тысяч документов.
,
0 shamashs
 
27.04.12
12:57
Есть база в ней около полутора милионов документов, необходимо выборочно удалить 800 тысяч документов, которые не попадают в список значений. На текущий момент сделал прямым запросом получаю список документов на удаление и каждый из них обхожу Удалить(0);

Проблема в том что удаляемые документы в различных периодах.
И в день у меня удаляется с движениями около 25т. документов на хорошем таком серваке. Что подскажете по ускорению удаления? Заранее большое спасибо тем кто откликнеться.
1 kod263
 
27.04.12
13:00
быстрые способы 1С не поощряются :)
2 Mikeware
 
27.04.12
13:00
Переходите на семерку :-)
3 Лоботряс
 
27.04.12
13:01
ОбменДанными.Загрузка = Истина
4 PR
 
27.04.12
13:02
На восьмерке? 25 000 документов в день?! Не верю.
Попробуй удалять движения через набор записей.
5 Господин ПЖ
 
27.04.12
13:02
отключить итоги по регистрам
6 pumbaEO
 
27.04.12
13:02
Отключи итоги на регистрах
Удали
Включи итоги.
7 shamashs
 
27.04.12
13:02
ой пардон, это в 7ке)
8 Господин ПЖ
 
27.04.12
13:02
надеюсь sql не 2000...
9 КМ155
 
27.04.12
13:03
(0) отключить итоги уже предлагали ?
10 daim-1
 
27.04.12
13:03
ахахаахх)
11 Fragster
 
гуру
27.04.12
13:03
удалить скулем можно
12 PR
 
27.04.12
13:03
(7) Так ты это... аккуратней :))
13 le_
 
27.04.12
13:03
(0) Посмотреть, каким SQL-запросом удаляется документ, каким удаляются движения. Оптимизировать эти запросы и удалить прямым запросом движения и документы.
14 shamashs
 
27.04.12
13:05
есть пример скрипта удаляющего? он же пишет типа DELTE * from doc where doc.docno = IDDOCID, Как сделать чтобы типа DELETE * from JOURN where doc not in [@Сз]
15 le_
 
27.04.12
13:08
(14) Ты же СЗ прямым запросом получаешь?
delete * from tab where doc not in (select ... твой запрос для получения СЗ)

Только еще раз посмотри в профайлере, какой там запрос для удаления.
16 Господин ПЖ
 
27.04.12
13:10
а с итогами в рег. накопления чего делать?
17 acsent
 
27.04.12
13:10
удаление дока - это удаление как минимум в 3 таблицах, а еще регистры, всякие там документы основания и прочая хрень
18 shamashs
 
27.04.12
13:12
вот это меня смущает.
19 shamashs
 
27.04.12
13:12
(17) документы не одного вида соответственно регистры разные проводки там всякие итп.
20 le_
 
27.04.12
13:12
Ну, вот я и говорю, посмотри еще раз, какие там запросы )
21 shamashs
 
27.04.12
13:12
примеров нет ни у кого?
22 shamashs
 
27.04.12
13:12
дак для каждого вида щас
23 shamashs
 
27.04.12
13:13
кстати тут же еще вопрос имеет смысл ставить 2008 скл или 2012 если odbc драйвер подменять приходиться все равно.
24 Mikeware
 
27.04.12
13:18
(16) пересчитать прямым запросом :-)
25 shamashs
 
27.04.12
13:19
exec sp_executesql N'Delete from _1SJOURN where  ROW_ID=@P1',N'@P1 int',2063903

Это он делетит из журнала я так понимаю запускает хранимку с параметрами.

exec _1sp_RegisterUpdate 'OPT',615,' 2GDZ0CIB','D'

Это я так понимаю удаление или обновление движений регистров в соответствующих таблицах.

declare @p1 int
set @p1=425779
exec sp_prepexec @p1 output,N'@P1 varchar(9)',N'Delete from DT615 where IDDOC=@P1',' 2GDZ0CIB'
select @p1

вот еще такая штука идет.
не особо понимаю как в моем случае этим заниматься.
26 Mikeware
 
27.04.12
13:19
(14) а удалять данные из движений регистров, из ссылок документов и из периодики - должен Александр Сергеевич?
27 Он
 
27.04.12
13:20
Делал недавно.

1. ТА на первый.
2. Удаляем с конца списка транзакциями по 500 доков.

На локальной тачке - 800 000 доков за 2 с небольшим часа.
28 shamashs
 
27.04.12
13:21
http://dl.dropbox.com/u/33644751/sql.sql

вот такой скрипт есть но он для обрезки базы у меня используется.
29 Он
 
27.04.12
13:21
+(27) Тоже поначалу хотел прямыми. Глянул результат и сделал штатно.
Правда список формировал прямым.
30 shamashs
 
27.04.12
13:21
(27) все так кроме транзакций, сейчас перепишу под транзакции. Но я думаю там ведь не в 10ки раз увеличивается скорость)
31 shamashs
 
27.04.12
13:22
через часок отпишусь когда [@сз] сформируется.
32 shamashs
 
27.04.12
13:23
спасибо все за помощь.
33 shamashs
 
27.04.12
13:23
*всем
34 Он
 
27.04.12
13:24
(31) Не трать время.


   RS = СоздатьОбъект("ODBCRecordset");
   ТекстЗапроса = "
   |SELECT
   |    Журнал.IDDOC as [Док $Документ],
   |    MIN(Журнал.IDDOCDEF) as Док_вид
   |FROM _1SJOURN As Журнал (nolock)
   |WHERE
   |    Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |  and Журнал.ISMARK = 0
   |GROUP BY
   |    Журнал.IDDOC";
   //|WHERE
   RS.УстановитьТекстовыйПараметр("НачДата", Дата("24.11.00"));
   RS.УстановитьТекстовыйПараметр("КонДата", ВыбДата);
   Тд = RS.ВыполнитьИнструкцию(ТекстЗапроса);
   RS = "";

   Тд.УдалитьКолонку("Док_вид");
   Скока = Тд.КоличествоСтрок();
   Сообщить("" + ТекущаяДата() + " " + ТекущееВремя() + " " + Скока);
   Форма.Обновить(1);
   Тд.Сортировать("-Док", 1);

   Док = СоздатьОбъект("Документ");
   Тд.ВыбратьСтроки();
   К = 0;
   Пока Тд.ПолучитьСтроку() = 1 Цикл
       Если К = 500 Тогда
           ЗафиксироватьТранзакцию();
           К = 0;
       КонецЕсли;
       Если К = 0 Тогда
           НачатьТранзакцию()
       КонецЕсли;
       Док.НайтиДокумент(Тд.Док);
       Состояние("" + Тд.НомерСтроки + "/" + Скока + " - " + Док.ТекущийДокумент());
       Док.Удалить(0);
       К = К + 1;
   КонецЦикла;
   ЗафиксироватьТранзакцию();

   Состояние("Двигаем ТА на " + ВыбДата);
   УстановитьТАНа(ВыбДата);
   Сообщить("" + ТекущаяДата() + " " + ТекущееВремя());
   Сколько = (_GetPerformanceCounter() - Нач) / 1000;
   Сообщить("" + Цел(Сколько / 3600) + " часов " + Цел((Сколько % 3600) / 60) + " мин.");
35 Mikeware
 
27.04.12
13:33
(31) список формируется - час????
36 shamashs
 
27.04.12
13:42
там сложное условие с кучей тз. Частично на прямых частично обходом. период 2 года.
37 Mikeware
 
27.04.12
13:43
(36) что-то у вас в консерватории не так....
38 shamashs
 
27.04.12
13:46
может быть, но я уже устал с этой "отчетностью" не буду ничего менять насчет транзакций спасибо бодрее насколько бодрее еще не посчитал. Но видно невооруженным взглядом.
39 shamashs
 
27.04.12
13:52
103тысячи документов. получиться за сутки, если никто скл не загрузит. Если за 8 миинут 577 документов то получаеться 100т документов в сутки, посмотрим может зависит еще от переполнения памяти.
40 Злопчинский
 
27.04.12
18:14
мдя.. как-то сложно все у снеговиков...
41 ILM
 
гуру
27.04.12
19:55
Конфа ИТРП поди?
42 0xFFFFFF
 
27.04.12
20:06
(0) Точку актуальности - в зад, БИ - в зад.
Удаление документов в транзакции по 100-200 штук.

Нафига формировать список из 800 тысяч ссылок... Изнасилование ОЗУ?
43 VladZ
 
27.04.12
21:10
(0) Я бы попробовал так:
1. удаляешь прямым запросом:
DELETE * from JOURN (с нужными тебе условиями).

2. Запускаешь ТИИ с удалением объектов (+пересчет итогов).
44 opty
 
27.04.12
21:50
(0) Поиск ? ...
Как удалить документы из базы

достаточно подробно вопрос рассмотрен