|
Удаление записей из таблиц 1С прямым SQL запросом | ☑ | ||
---|---|---|---|---|
0
KarpovDeniska
06.02.12
✎
23:05
|
SQL_ТекстЗапроса = "
| DELETE FROM " + ИмяТаблицы + " WHERE " + ИмяТаблицы + "._Period <="+"'"+Формат(КонецПериода,"ДЛФ=DT")+"';"; Попытка Connection.execute(SQL_ТекстЗапроса,,128); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
1
Чайник Рассела
06.02.12
✎
23:06
|
гениально.
Бекап сделал? |
|||
2
Господин ПЖ
06.02.12
✎
23:06
|
и чо?
|
|||
3
KarpovDeniska
06.02.12
✎
23:08
|
)))))))))) Извиняюсь не дописал, случайно отправил )), собственно текст запроса выше. У меня вопрос: при выполнении этого запроса когда период не большой, запрос как бы выполняется , но данные не меняются,т.е как было 100 регистраторов так и остаётся. когда делаю период около года, тогда запрос начинает отрабатывать нормально и всё чистит, в чём проблема может быть??
|
|||
4
aleks-id
06.02.12
✎
23:11
|
а ты рисковый...
|
|||
5
KarpovDeniska
06.02.12
✎
23:12
|
агась, база 600 гигов )))
|
|||
6
also
06.02.12
✎
23:32
|
drop table пиши сразу, не ошибешься
|
|||
7
Попытка1С
06.02.12
✎
23:46
|
Зачем тебе 1с тут... открывай квери и вперед..
|
|||
8
KarpovDeniska
07.02.12
✎
08:17
|
(7) это не решает проблему, в qa результат тот же
|
|||
9
rs_trade
07.02.12
✎
08:23
|
(8) запрос как бы выполняется, это как?
|
|||
10
KarpovDeniska
07.02.12
✎
09:23
|
(9) т.е Выполняется, нормально отрабатывает, в исключение не попадает, только очень быстро, такое ощущение, как будто для пустой таблицы отрабатывает, хотя за это период выборку делаю, всё ок
|
|||
11
Ненавижу 1С
гуру
07.02.12
✎
09:26
|
интересно, если это РН, то как быть с итогами?
|
|||
12
Ёпрст
07.02.12
✎
09:27
|
(3)
И где там в запросе ограничение на период? там только на дату |
|||
13
Ёпрст
07.02.12
✎
09:29
|
(11) пересчитает потом. вот другие зависимые таблички надо бы тоже чистить еще
|
|||
14
KarpovDeniska
07.02.12
✎
09:30
|
(12) Бли, с начала года по эту дату 100 доков например, потом прибавляю к дате 6 месяцев, получается 10000 доков, вот когда 10000 начинает чистить, когда меньше фиг ( это утрированно)
|
|||
15
KarpovDeniska
07.02.12
✎
09:30
|
(11) я итоги отключил, а какие ещё зависимые???
|
|||
16
ОчкарикСлава
07.02.12
✎
09:31
|
(15) ну регистры, наприемр "Списанные товары" для РТУ и т.д.
|
|||
17
Sammo
07.02.12
✎
09:32
|
К слову - будет сильно разбухать файл лога (при модели фул).
Для сокращенияМожно делать - select во временную табличку по условию. Дропаешь старую, переименовываешь временную в старое наименование. + проверь конец периода. P.S. Имхо - лучше использовать штатные механизмы. |
|||
18
ОчкарикСлава
07.02.12
✎
09:32
|
А чем штатная обработка не катит?
|
|||
19
KarpovDeniska
07.02.12
✎
09:32
|
Штатными 14 дней чистилось всё, и мы забили
|
|||
20
Sammo
07.02.12
✎
09:33
|
(15) Зависит от очищаемой таблицы. Здесь нет контроля ссылочной целостности. Например, грхнешь счет, а наклданые оставишь - появятся битые ссылки.
|
|||
21
KarpovDeniska
07.02.12
✎
09:33
|
мож кто нить знает как побыстрому очистить РН кроме как с отбором по регистратору?
|
|||
22
zelebobi4
07.02.12
✎
09:34
|
(15)
Гм.Например чистишь таблицу документов заказ покупателя. А на основании заказа вводидтся реализация товаров. (В ут типовой такое есть) То если удалить заказ, в док-те реализация будет ссылка на несуществующую запись. Собственно в этом есть минус - надо все связи проработать. |
|||
23
ptiz
07.02.12
✎
09:34
|
Вместо
Формат(КонецПериода,"ДЛФ=DT") я бы для уверенности сделал так "CONVERT(datetime, '" + Формат(Дата, "ДФ='yyyy-MM-dd HH:mm:ss'") + "' , 120)" |
|||
24
KarpovDeniska
07.02.12
✎
09:34
|
(20) да и фиг сними , перетяну из копии если что по уиду
|
|||
25
zelebobi4
07.02.12
✎
09:34
|
(21)
Тебе вообще весь надо грохнуть? |
|||
26
KarpovDeniska
07.02.12
✎
09:35
|
(23) так пробовал, выдаёт ошибку что то типа неподдерживаемый system type
|
|||
27
ОчкарикСлава
07.02.12
✎
09:35
|
может лучше перетянуть в пустую базу то что надо оставить?
|
|||
28
KarpovDeniska
07.02.12
✎
09:36
|
(27) уже думал, непонятно как перетягивать непериодические регистры, которые тоже неслабых размеров
|
|||
29
KarpovDeniska
07.02.12
✎
09:37
|
(25) ну да, или проще нав все доки грохнуть, тогда и РН потруться
|
|||
30
Lama12
07.02.12
✎
09:38
|
(0) А лицензию 1С нарушать кто учил?
|
|||
31
ptiz
07.02.12
✎
09:40
|
Сделай в квари аналайзере SELECT вместо DELETE и посмотри, какие записи возвращает.
|
|||
32
ptiz
07.02.12
✎
09:42
|
у меня так работает
Процедура ОчиститьРегистрНакопленияВSQL(ИмяРегистра, Дата1, Дата2) Экспорт ОбъектМетаданных = Метаданные.РегистрыНакопления[ИмяРегистра]; МассивМД = Новый Массив; МассивМД.Добавить(ОбъектМетаданных); ТаблицаБД = ПолучитьСтруктуруХраненияБазыДанных(МассивМД, Истина); ИмяТаблицы = ТаблицаБД.Найти("Основная", "Назначение").ИмяТаблицыХранения; // удаляем частями по 500 000 записей Команда = "DELETE " + ИмяТаблицы + " |FROM | (SELECT TOP 500000 _Period FROM dbo." + ИмяТаблицы + " | WHERE _Period >= " + ДатаСтрокойВSQL(Дата1) + " and _Period <= " + ДатаСтрокойВSQL(КонецДня(Дата2)) + " ORDER BY _Period) as t |WHERE t._Period = " + ИмяТаблицы + "._Period"; Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Период ИЗ РегистрНакопления." + ИмяРегистра + " ГДЕ Период МЕЖДУ &Дата1 И &Дата2"); Запрос.УстановитьПараметр("Дата1", Дата1); Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); Результат = Запрос.Выполнить(); Пока НЕ Результат.Пустой() Цикл ОбработкаПрерыванияПользователя(); RecSet.Open(Команда, SQLServer, 3, 1, 1); Результат = Запрос.Выполнить(); КонецЦикла; КонецПроцедуры |
|||
33
Sammo
07.02.12
✎
09:45
|
(29) Ага. И обработка удаления табличных частей у документов тоже сделана?
|
|||
34
Ёпрст
07.02.12
✎
09:48
|
(0) воткни OUTPUT DELETED.* ..увидишь записи, которые удалил..
А так, вот готовая поделка, к примеру: http://infostart.ru/public/16731/ |
|||
35
ptiz
07.02.12
✎
09:49
|
(29) Про журналы не забудь, а то весело будет.
|
|||
36
rs_trade
07.02.12
✎
10:44
|
вместо delete подставь select * и посмотри результат
|
|||
37
zmaximka
07.02.12
✎
11:00
|
Отважные вы люди как я погляжу
|
|||
38
rs_trade
07.02.12
✎
12:08
|
(37) а в чем отвага? при наличии определенных знаний работа напрямую со скулем не представляет никакой сложности и опасности. если для вас скуль это нечто темное и неизведанное, тогда конечно.
|
|||
39
KarpovDeniska
07.02.12
✎
12:59
|
(34) то что нужно ))
|
|||
40
acsent
07.02.12
✎
13:05
|
так удалять нужно шапку документ, табличные части, движения с пересчетом итогов, журналы, криткрии отбора.
а ты только шапку |
|||
41
KarpovDeniska
07.02.12
✎
13:21
|
(40) неее, удаляю все то что ты написал )
|
|||
42
KarpovDeniska
07.02.12
✎
23:15
|
подскажите кто знает, а на скуле временную таблицу можно вообще переименовать? если нет, то как реальную таблицу можно заменить временной, что то нигде не могу найти как это делается
|
|||
43
KarpovDeniska
07.02.12
✎
23:32
|
шо, никто не знает чтоль?? тогда ещё один вопрос:
если я сделаю "SELECT * INTO _MyTable FROM _MyTable AS T WHERE T.PERIOD >= '01012012' Таблица перезатрётся, если такая уже есть в базе??? или будет ошибка на неуникальность имени??? |
|||
44
s03
08.02.12
✎
00:17
|
http://msmvps.com/blogs/gladchenko/archive/2010/03/09/1761298.aspx#5
вот здесь есть выкладки по массовой загрузке или удалению в SQL |
|||
45
s03
08.02.12
✎
00:23
|
(42) заменить сами таблицы - никак, а вот залить данные из одной в другую - смотри пост выше.
А если кратко, то в старой TRUNCATE, и затем INSERT INTO стараяТаблица WITH (TABLOCK) SELECT * FROM новаяТаблица Примерно так |
|||
46
Господин ПЖ
08.02.12
✎
00:24
|
(43) зависит от ограничений накладываемых на таблицу
|
|||
47
rs_trade
08.02.12
✎
02:11
|
(42) а зачем переименовывать временную таблицу?
|
|||
48
Sammo
08.02.12
✎
07:46
|
Дропаешь старую
drop table 'имя таблицы' И переименовываешь временную exec sp_rename 'старое имя', 'новое имя' Но сие работает, если временная таблицу у тебя физически таблица, а не с # |
|||
49
Sammo
08.02.12
✎
07:47
|
(47) Например, отбираешь с отбором во временную без #. Дропаешь старую, переименовываешь временную.
|
|||
50
Кириллка
08.02.12
✎
07:51
|
(43)Если _MyTable уже есть, то ругнется - 100%.
|
|||
51
vde69
08.02.12
✎
08:14
|
кто мешает удалять штатными методами?
запускаешь 31 сеансов и в них начинаешь штатно удалять в разных периодах.... в первом сеансе все документы первого числа каждого месяца, во втором второе число... если база не кривая, никаких блокировок не будет :) |
|||
52
vde69
08.02.12
✎
08:15
|
да и лог поставь в симпл на время удаления.... транзакции сделай не очень большие, я-бы сделал по 1 дню
|
|||
53
vde69
08.02.12
✎
08:20
|
(51) кстати можно 31 регламентных задания, запустить, думаю это будет самое быстрое и правильное, у регламентного задания есть параметр, это будет номером дня в месяце...
надо будет попробовать :) |
|||
54
Sammo
08.02.12
✎
08:37
|
+(51) Кстати, только за счет перевода операции на сервер скорость возрастает раза в 2 (один и тот же алгоритм работы)
|
|||
55
KarpovDeniska
08.02.12
✎
09:32
|
(54) запускали в 10 сеансах на 64 разрядном серваке, 14 дней, окончания не дождались
|
|||
56
KarpovDeniska
08.02.12
✎
09:34
|
ой, (51)
|
|||
57
Sammo
08.02.12
✎
10:29
|
(55) С отключенным пересчетом итогов и ОбменДанными.Загрузка = истина?
|
|||
58
KarpovDeniska
08.02.12
✎
10:48
|
(57) да
|
|||
59
vde69
08.02.12
✎
11:01
|
конечно не в обиду, но все-же удивляюсь как в 24 года доверили базу в 600 гигов.
лично у меня нет опыта работы с такими базами... 30 - это нормально, а тут 600 :) |
|||
60
KarpovDeniska
08.02.12
✎
11:07
|
))) у меня тож нет, а у них вариантов не много, пользователи кричат целыми днями на it отдел, что 1С тупит, документы 30 мин проводится. у них рарус год на аутсорсе работал, и чёт толку ни хрена, тольк косяки
|
|||
61
KarpovDeniska
08.02.12
✎
11:11
|
подскажите, на что упереться можно в таблице табчасти, какое нить поле типа периода, чтобы можно было тоже все убить раньше какой нить даты.
|
|||
62
vde69
08.02.12
✎
11:11
|
(60) сделай фоновое задание и пусть полгода удаляет....
а вообще что-то у тебя не правильно там, за 14 дней в 10 потоков можно черта лысого удалить, что-то у тебя СОВСЕМ не так!!! удаление идет быстрее записи, на среднем оборудовании запись ляма записей в регистр сведений идет примерно 40 минут (штатной обработкой) сколько у тебя строк в этом регистре? |
|||
63
rs_trade
08.02.12
✎
11:12
|
(61) связь только по шапке.
|
|||
65
KarpovDeniska
08.02.12
✎
11:18
|
(63) т.е я кидаю доки во врем таблицу, потом говорю " удалить табчасть где табчасть.ссылка в (выбрать ссылка из времдоков);
а так как сначала удаляются доки, а потом таб части, то получается, что если документы удалятся, а на таб частях упадёт на ошибке, или на таймауте, то табчасти уже придётся удалять только все? |
|||
66
KarpovDeniska
08.02.12
✎
11:21
|
(62) не путай регистр сведений и накопления
|
|||
67
vde69
08.02.12
✎
11:23
|
(65) o_O
есть такое слово Транзакция.... |
|||
68
KarpovDeniska
08.02.12
✎
11:23
|
сведений чистится за 3 минуты, накопления в день 150 тысяч регистраторов где то
|
|||
69
KarpovDeniska
08.02.12
✎
11:23
|
(67) уже сообразил
|
|||
70
vde69
08.02.12
✎
11:24
|
(66) ничем не отличается если расчет итогов отключен
|
|||
71
KarpovDeniska
08.02.12
✎
11:24
|
(68) в регистре 2300000 регистраторов
|
|||
72
rs_trade
08.02.12
✎
11:25
|
(65) удаляй сначала ТЧ. если доки уже удалил, удаляй тч для которых нет шапок документов. соединяй таблицу тч с основной таблицей и по нулл грохай.
|
|||
73
vde69
08.02.12
✎
11:25
|
(68) 150тыс документов - это детские обьемы, максимум минут 30...
обнови статистику, отключи итоги |
|||
74
KarpovDeniska
08.02.12
✎
11:26
|
итоги отключены
|
|||
75
vde69
08.02.12
✎
11:26
|
(71) это ДЕТСКИЕ обьемы, даже 7.7 нормально тянет... интересно от куда у тебя 600 гиг???
|
|||
76
vde69
08.02.12
✎
11:28
|
сейчас выясним что база 20 гигов а все остальное скульный лог, и в конторе нет ни одного спеца по скулю, по этому ни кто ни когда регламенты не делал :)
|
|||
77
KarpovDeniska
08.02.12
✎
11:32
|
(76) т.е если в документе 1000000 строк то это вообще не важно???
|
|||
78
KarpovDeniska
08.02.12
✎
11:32
|
(78) и в регистре на 1 док милион записей тоже все равно?
|
|||
79
vde69
08.02.12
✎
11:34
|
(77) с точки зрения базы почти не важно, если индексировали правильно... единственое - это то что транзакция будет слишком большая (памяти много)
а вообще за такой документ убить нужно.... |
|||
80
rs_trade
08.02.12
✎
11:35
|
(77) в документе может быть максимум 100000 строк. это на заметку.
|
|||
81
KarpovDeniska
08.02.12
✎
11:37
|
(80) 2 таб части, в одной контрагенты, в другой номенклатура, контрагентов 500 номенклатуры 5000, движения делаются так: на каждого контрагента выбирается вся номенклатура, итого 2500000 записей
|
|||
82
vde69
08.02.12
✎
11:43
|
(81) мда.... такого я еще не видел...
тому кто это сделал руки оторвать нафиг... теперь я понимаю от куда размеры базы :) переделывай все... 1. документ на 1 контрагента (в шапку) 2. нафига регистр накоплений? это класический регистр сведений... 3. индексы в порядок приводить... |
|||
83
KarpovDeniska
08.02.12
✎
11:45
|
(82) ну да, документ мне тоже изначально понравился,про индексы х.з, слышал админы пытались переиндексацию запустить, она часов 20 идёт, столько времени соответственно никто не даёт
|
|||
84
KarpovDeniska
08.02.12
✎
11:46
|
т.е год с базой точно не делалось никаких регламентов
|
|||
85
rs_trade
08.02.12
✎
11:52
|
(81) а что за движения? надо смотреть можно ли перепроектировать, что бы не было кросс-джойна.
|
|||
86
vde69
08.02.12
✎
11:56
|
(84) обнови SQL статистику, скорость возрастет раз в 200
|
|||
87
KarpovDeniska
08.02.12
✎
11:56
|
(86) а это как и чего?
|
|||
88
vde69
08.02.12
✎
12:00
|
||||
89
KarpovDeniska
08.02.12
✎
12:01
|
(88) спасибо, а насколько долгая эта процедура?
|
|||
90
vde69
08.02.12
✎
12:02
|
(89) на 100 гигах минут 20, но пользователи могут работать в это время
|
|||
91
KarpovDeniska
08.02.12
✎
12:04
|
(81) я думал разбить на 2 регистра просто, в один контрагентов , в другой номенклатуру,ну или как (82) на одного контра 1 док, но меня съедят, это им 500 доков придётся делать, они же не привыкли
|
|||
92
rs_trade
08.02.12
✎
12:09
|
(91) да не надо 500 доков делать. в движениях что пишется?
|
|||
93
vde69
08.02.12
✎
12:13
|
(91) 500 документов должны делатся из одной обработки
|
|||
94
KarpovDeniska
08.02.12
✎
12:18
|
(93) как вариант, (92) контрагент , номенклатура
|
|||
95
rs_trade
08.02.12
✎
12:19
|
(94) в ресурсах что хранится?
|
|||
96
KarpovDeniska
08.02.12
✎
12:20
|
(95) булево
|
|||
97
rs_trade
08.02.12
✎
14:03
|
(96) типа принадлежность номенклатуры контрагенту?
|
|||
98
KarpovDeniska
08.02.12
✎
14:06
|
(97) запрет
|
|||
99
pumbaEO
08.02.12
✎
14:10
|
(98) И это храниться в регистре накопления?
|
|||
100
rs_trade
08.02.12
✎
14:17
|
(98) периодичность важна, я так понимаю?
|
|||
101
rs_trade
08.02.12
✎
14:30
|
можно вообще отказаться от регистров. забацать запрос и пусть из доков данные получает. методологически не совсем верно конечно, но зато нету диких объемов регистров.
|
|||
103
KarpovDeniska
08.02.12
✎
16:15
|
(101) тоже об этом думал,да, периордичность важна
|
|||
104
KarpovDeniska
08.02.12
✎
16:17
|
(90) узнал у админов, обновление статистики выполняется постоянно. логи 20 гигов, база 600 )))))
|
|||
105
KarpovDeniska
08.02.12
✎
18:41
|
(101) там выборка среза последних по этому регистру для отчета, если через документы, чет как то закручено получается (((
|
|||
106
Ёпрст
09.02.12
✎
10:51
|
(104) Дык шринкани лог..
|
|||
107
Ёпрст
09.02.12
✎
10:51
|
нафик он в 20 гигов не упал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |