|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |