|
Удаление элементов справочников в транзакции.. реально ли быстрее? | ☑ | ||
---|---|---|---|---|
0
nodrama
15.08.22
✎
15:08
|
Доброго времени суток. Готовлюсь к удалению не нужной номенклатуры, тестю разные варианты ;)
Код простой. запросом выбираю номенклатуру. Далее тестирую удаление ее, с транзакцией и без. Может я делаю что то не так но разницу я не увидел.. В общем запросом выбрал первые 200. ради теста. Первый раз удалил эти 200 с транзакцией . Второй раз удалил эти 200 без нее. просто подряд. В итоге разница между этими двумя разами, было всего в 1.5 секунды, в пользу варианта с транзакцией. Во втором запуске разницы вообще не было.. милисекунды какие-то. Или на такой мелочи как 200 элементов справочника, он ни чего и не покажет? |
|||
1
DTX 4th
15.08.22
✎
15:13
|
Чисто логически, с транзакцией должно быть дольше.
200 - семечки. |
|||
2
DTX 4th
15.08.22
✎
15:15
|
Объектная модель, ветер серверный...
Если скуль, то можно одним запросом это все грохнуть. |
|||
3
nodrama
15.08.22
✎
15:16
|
Мне в соседней ветки советовали записывать номенклатуру в транзакциях, партиями.. ибо типо так быстрее.
Я подумал что если удалять номенклатуру то в транзакциях так же должно быть быстрее... но че то я этого пока не увидел 200 поняное дело фигня. просто ради теста запустил |
|||
4
DTX 4th
15.08.22
✎
15:17
|
(3) С чего вдруг запись в транзакции должна быть быстрее?
|
|||
5
nodrama
15.08.22
✎
15:17
|
(2) можно, но я не уверен, что я напишу запрос на sql .. у меня там отборы что номенклатура должна быть в иерархии конкретного родителяя, с опредеоенным видом и определенного производителя ну и т.д
|
|||
6
Dmitrii
гуру
15.08.22
✎
15:17
|
(0) >> на такой мелочи как 200 элементов справочника, он ни чего и не покажет?
+1. Заморачиваться имеет смысл если только количество удаляемых измеряется тысячами. Да и то придётся поэкспериментировать с подбором правильного размера порции для каждой транзакции. В типовых в обработчиках обновления конфигурации обычно обрабатывают объекты порциями по 500-1000 элементов/документов/записей. Если критична скорость, то лучше посмотреть в сторону (2) - запросами СУБД. |
|||
7
Garykom
гуру
15.08.22
✎
15:17
|
(0) Ты совсем удаляешь или помечаешь на удаление?
|
|||
8
СеменовСемен
15.08.22
✎
15:17
|
(0) может ты будешь первый кто реальные тесты проведет
|
|||
9
DTX 4th
15.08.22
✎
15:18
|
(5) Ну ты сначала айдишники приготовь в 1с или любые другие ключевые поля, а потом
DELETE FROM * WHERE id IN ("1", ..., "100500") |
|||
10
Garykom
гуру
15.08.22
✎
15:18
|
И надеюсь у тебя транзакция то на сервере только да?
Ты же не дергаешь в цикле с клиента сервер надеюсь а? |
|||
11
nodrama
15.08.22
✎
15:19
|
(4) я об этом же подумал. но в соседней теме советовали загружать 4 ляма номенклатуры в транзакциях по ННому количеству штук за раз. а не прям подряд каждую типо так в разы быстрее... но этого я не тестил) а почему кто то так считает я так и не понял. (7) удаляю совсем. ссылок на них нет. ни где больше
|
|||
12
Garykom
гуру
15.08.22
✎
15:19
|
(11) Извини но ты ....
|
|||
13
DTX 4th
15.08.22
✎
15:19
|
(11) Ветку и коммент в студию)
Транзакция в данном случае - лишь дополнительная нагрузка. |
|||
14
nodrama
15.08.22
✎
15:19
|
(6) у меня ляма 2 номенклатуры... но ради теста запускать в копии 2 ляма.. что бы потом часами/днями сидеть ждать.. было лень взял 200 )
|
|||
15
СеменовСемен
15.08.22
✎
15:21
|
(13) в 77 реально помогало. А вот по 8 я тестов ни разу не видел
|
|||
16
nodrama
15.08.22
✎
15:24
|
На сколько я понял транзакция прекрасная вещь когда ты грузишь допустим что-то допустим 10 доков, один из них с ошибкой и тебе надо нафиг отменить загрузку предыдущих 9-и ибо они связаны
тогда отменатранзакции тебе нафиг все вернет назад, и все. Попробовал сейчас на 2000 позиций. ситуация такая же. разница с транзакцией и без.. 1-2 секунды. что не критично. |
|||
17
YFedor
15.08.22
✎
15:24
|
А тесты с монопольным / не монопольным режимом не делал?
|
|||
18
nodrama
15.08.22
✎
15:25
|
но пока я не вижу как удаление 2000 элементов с транзакцией и без влияют на скорость. сейчас запущу 100к штук.
|
|||
19
nodrama
15.08.22
✎
15:25
|
(17) я в базе 1-н. думаешь все равно надо установить монопольный режим?
|
|||
20
YFedor
15.08.22
✎
15:26
|
(19) Да
|
|||
21
Timon1405
15.08.22
✎
15:27
|
(9) угу, только у справочников, например, есть еще таблица изменений, а у регистров еще таблица итогов, и еще много чего про что вы можете не знать. лицензионная политика 1с придумана не просто так и призывать ее нарушать - не комильфо
|
|||
22
Garykom
гуру
15.08.22
✎
15:28
|
(18) Код покажи
И проверь с разным количеством объектов в транзации от 1, 10, 100, 1000, 10000 и т.д. |
|||
23
СеменовСемен
15.08.22
✎
15:29
|
Если чисто логически рассуждать, то транзакции не должны влиять
|
|||
24
DTX 4th
15.08.22
✎
15:29
|
(21) ТиИ сверху полирнуть) Делов то
Совсем другое дело тысячи элементов поштучно удалять. Под определение комильфо подходит? (11) Ветку уже покажи) А то вдруг ты все не так понял) |
|||
25
DTX 4th
15.08.22
✎
15:30
|
(23) СУБД приходится дополнительно держать в уме данные о текущей транзакции, которые, подозреваю, могут расти чуть ли не экспоненциально.
|
|||
26
СеменовСемен
15.08.22
✎
15:31
|
(24) тии может выполняться дольше чем простое удаление
|
|||
27
СеменовСемен
15.08.22
✎
15:32
|
(24) нет именно так и советут. Много где видел
|
|||
28
nodrama
15.08.22
✎
15:32
|
(22) Погоди а как ты предлагаешь тестить ??
То есть при 1000 элементов. Разделить их по 10, потом по 100, потом по 500 И проверить как быстрее будет? А потом проверить вообще без транзакции ? Я сейчас все 1000 засунут в транзакцию и грохнул а второй раз вообще без транзакции. результат одинаковый |
|||
29
YFedor
15.08.22
✎
15:33
|
(23) Предполагается, что работа с журналом транзакций происходит быстрее, чем с самими таблицами базы.
Мы как бы сначала записываем факт удаления N-записей в промежуточную таблицу, затем, по команде СУБД эти данные скопом записывает в таблицы данных и это быстрее, чем поштучно записывать в базу. |
|||
30
YFedor
15.08.22
✎
15:35
|
(28) Опираясь на (29) предполагаем, что для данной конкретной ситуации мы подберем такой размер транзакции, использование которого обеспечит нужный прирост скорости.
Но никто не гарантирует, что нужный прирост скорости вообще произойдет. |
|||
31
Garykom
гуру
15.08.22
✎
15:38
|
(28) я предполагаю что тебе надо менять сферу деятельности
как минимум бросать программирование, особенно на 1С |
|||
32
DTX 4th
15.08.22
✎
15:38
|
(27) Так потому что альтернатив нет.
(29) Кем предполагается? Тесты в студию. Если есть прямой доступ к транзакциям, то может сработать. Но т.к. сверху у нас 1С - не верю. |
|||
33
СеменовСемен
15.08.22
✎
15:38
|
(29) ну так чекпойнт не после каждой транзакции вызывается. Скуль сам знает когда нужно
|
|||
34
DTX 4th
15.08.22
✎
15:39
|
(29) Грязное чтение...
Читает по несколько таблица на один запрос?) |
|||
35
СеменовСемен
15.08.22
✎
15:41
|
(29) но при чем здесь грязное чтение?
|
|||
36
Garykom
гуру
15.08.22
✎
15:41
|
Имхо у ТС основные затраты времени не на удаление а на что то еще.
И транзакция тут не поможет понятно дло. |
|||
37
СеменовСемен
15.08.22
✎
15:43
|
(36) это с чего вдруг? Что может быть еще?
|
|||
38
nodrama
15.08.22
✎
15:44
|
(36) Короче... очень долго... нет у меня затрат времени. Я засекаю время с начало удаление 1 элемента. И фиксирую время в конце удаления последнего элемента.
Короче с транзакцией и без.. удаление (Именно удаление, не запрос там и т.д.). 20 секуд. что так что так. то есть 200 элементов. удаляются 20 секуд. то есть 10 элементов в секунду... то есть если их 4 ляма.. то это неделя ))))))))) |
|||
39
nodrama
15.08.22
✎
15:45
|
Код две строки
Для каждого стр из Результат цикл тт=стр.Ссылка.ПолучитьОбъект(); тт.Удалить(); КонецЦикла; |
|||
40
СеменовСемен
15.08.22
✎
15:47
|
(38) не правильно тест делаешь
Нужно допустим 1000 шт и фикс транзакции каждые 200 |
|||
41
nodrama
15.08.22
✎
15:48
|
(40) А потом 1000 штук вообще без транзакции?
Ок сейчас сделаю так. Но все равно очень долго 200 элементов за 20 секунд. (именно удаление).. на 4 лямах это будет неделя |
|||
42
1Сергей
15.08.22
✎
15:49
|
(38) распареллелить не вариант?
|
|||
43
Kassern
15.08.22
✎
15:49
|
(41) разделяешь на 100500 потоков и вперед
|
|||
44
Garykom
гуру
15.08.22
✎
15:56
|
(39) объекты у тебя какого типа?
надеюсь не проведенные документы? |
|||
45
СеменовСемен
15.08.22
✎
15:59
|
(44) номенклатуру же удаляет
|
|||
46
1Сергей
15.08.22
✎
16:00
|
вообще 4 лямов номенклатуры это сильно канешна
|
|||
47
Kassern
15.08.22
✎
16:01
|
(46) Если не используются характеристики, то вполне может быть)
|
|||
48
nodrama
15.08.22
✎
16:05
|
(47) это электроника, всякие лсд, резисторы, конденсаторы, платы реле и т.д и т.п. там 4.5 лямов и все они разные
|
|||
49
1Сергей
15.08.22
✎
16:12
|
(48) на ссылочную целостность плевать?
|
|||
50
nodrama
15.08.22
✎
16:15
|
И так тесты
Выбрал 1000 Далее транзакция по 200. Общее время удаление (именно удаление, без запроса самого и т.д.) 1000 позиций составило - 1 минута 50 секунд Далее выбрал 1000 позиций и удалил просто без транзакций - 1 минута 51 секунда ))... (49) там нету ни картинок не характеристик, ни чего, ни движений, ни приходов ни расходов. это кривые загрузившиеся дубли..из кривых прайсов.. Там только название, полное название, артикул. |
|||
51
nodrama
15.08.22
✎
16:17
|
так что хоть бить эти 1000 на 200, хоть удалять 1000 в транзакции. в одной
хоть удалять 1000 без транзакций вообще разница в среднем 1 секунда, в пользу транзакции... что в обьеме миллионов не критично |
|||
52
nodrama
15.08.22
✎
16:18
|
(49) как я написал выше.. нет ни каких ссылок. там только номенклатура с артикулом и названиями. ни где ни когда не использовалась, без картинок и характеристик и цен
|
|||
53
1Сергей
15.08.22
✎
16:20
|
(52) так что насчет распараллелить?
|
|||
54
Kassern
15.08.22
✎
16:22
|
(50) Берете массив артикулов для удаления, делите на 7 частей и запускаете 7 сеансов, каждый со своим куском артикулов. В итоге за день все это дело удалите
|
|||
55
nodrama
15.08.22
✎
16:23
|
(54) я не могу взять массив артикулов !
в 30-40% кривой номенклатуры нету артикула воообще |
|||
56
uno-group
15.08.22
✎
16:23
|
код покажи, может ты начало окончание транзакции не туда влепил.
|
|||
57
Kassern
15.08.22
✎
16:24
|
(55) возьмите гуиды номенклатуры вместо артикулов
|
|||
58
nodrama
15.08.22
✎
16:24
|
то есть я сначала ищу дубли артикулов... это раз
потом ищу дубли в названиях 100% соответсвие.. это два Потом есть папка(родитель) главная - где я вообще ни чего не проверяю ее тупо надо снести там 300к позиций. |
|||
59
nodrama
15.08.22
✎
16:25
|
(56) НачатьТранзакцию();
Счетчик = 0; Для каждого стр из Результат цикл Счетчик = Счетчик + 1; тт=стр.Ссылка.ПолучитьОбъект(); тт.Удалить(); Если Счетчик = 200 Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); Счетчик = 0; КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); |
|||
60
uno-group
15.08.22
✎
16:25
|
Сколько номенклатуры остается может проще грохнуть все а потом нужное записать.
|
|||
61
nodrama
15.08.22
✎
16:26
|
(60) нужной 4 миллиона... не нужной 2 миллиона с чем то... всего 6 лямов
|
|||
62
nodrama
15.08.22
✎
16:27
|
(57) А как я разобью массив гуидов на 10 разных ?
То есть мне надо получить все не нужные мне гуиды номенклатуры.. допустим их 1000 как мне их разбить по 200 и запустить 5 разнрых сеансов ? сохранить их в 7 разных эксель файлов что ли ? |
|||
63
nodrama
15.08.22
✎
16:28
|
а 7 разных сеансов с удалением номенклатуры... не будут работать в 7 раз дольше чем 1 сеанс с удаление номенклатуры?
|
|||
64
uno-group
15.08.22
✎
16:28
|
А откуда спешка. может потихоньку грохнуть за несколько ночей частями и не парится. Удалить(0),Удалить(1) попробуй
|
|||
65
Kassern
15.08.22
✎
16:31
|
(62) зачем вам эксель?
Можете создать 7 файликов текстовых Если Счетчик/100000 = Цел(Счетчик/100000) Тогда Пишем файл. Можно создать 1 файлик и читать его построчно Для к=НачальнаяСтрока По КонечнаяСтрока Цикл ТекстДок.ПолучитьСтроку(к); |
|||
66
nodrama
15.08.22
✎
16:32
|
(64) Так это не несколько ночей...
200 штук номенклатуры . 20 секунд.. считаем. 2.000.000 - это 55 часов. это полные двое суток и это только само удаление (без запросов, отборов там и т.д.) а их больше 2 лямов) Да и не спешка собственно, а тесты как будет быстрее... одно дело когда это 2 суток, другое дело когда это 7 суток. вот и тестирую |
|||
67
Kassern
15.08.22
✎
16:32
|
В общем множество есть вариантов реализации
|
|||
68
Kassern
15.08.22
✎
16:33
|
(63) Возьмите 100тыс номенклатуры и протестите. Разбейте на 5 заданий по 20тыс.
|
|||
69
nodrama
15.08.22
✎
16:34
|
(65) ну тестовый не суть.
так вопрос другой. а 7 сеансов с удалением элементов еще и с транзакцией.. не замедлят ли работу... это не то же самое что допустим удаление с диска ? ... когда у тебя допустим 2 файла по гигабайту на диске.. если ты удалил 1 он удаляется 10 секунд.. а если ты запустил сразу два файла удаления то они уже даляются 20 секуд... и по факту получается одно и то же. что ты удалил по очереди два файла, что ты удалил их одновременно но двумя разными удалениями, то есть два раза мышкой тынклу удавлить)( |
|||
70
СеменовСемен
15.08.22
✎
16:35
|
(59) Если Счетчик % 200 = 0 Тогда
|
|||
71
Kassern
15.08.22
✎
16:35
|
(70) красивое
|
|||
72
Kassern
15.08.22
✎
16:35
|
можно и на дробную часть сослаться)
|
|||
73
Kassern
15.08.22
✎
16:36
|
(69) попробуйте, от вас не убудет
|
|||
74
nodrama
15.08.22
✎
16:41
|
Да попробую то я попробую ;) только все эти тесты и манипуляции то же время ;)
сейчас по факту будет что пока я тут тестирую и консультируюсь) быстрее было бы запустить как есть уже бы шло удаление ) |
|||
75
TormozIT
гуру
15.08.22
✎
16:44
|
Многопоточность спасет инициатора
|
|||
76
nodrama
15.08.22
✎
16:44
|
Кстати пока тестировал удаление.. был удивлен...
Запрос.Выполнить.Выгрузить и далее для каждого стр из результат тут удаление цикл Работает в разы быстрее чем Запрос.Выполнить.Выбрать Пока Результат.Следующий удаление цикл я имею ввиду общее время от начала до конца обработки ;) |
|||
77
nodrama
15.08.22
✎
16:44
|
(75) а то что предложил Kassern выше это не многопоточность?
|
|||
78
Kassern
15.08.22
✎
16:46
|
(74) возьмите не 100тыс, а 30тыс. Это должно занять у вас чуть меньше часа в одном потоке, и раза в 3 быстрее в три потока по 10тыс. В общем час тестов, зато можете сильно сэкономить время, в зависимости от возможности вашего железа
|
|||
79
Кир Пластелинин
15.08.22
✎
16:48
|
а обменданными.загрузка = истина не поможет? при условии, что есть регистры с измерениями, где флаг "Ведущее" установлен и типом удаляемого справочника. правда и этот мусор потом придется подчищать...
|
|||
80
nodrama
15.08.22
✎
16:51
|
(79) обменданными.загрузка = истина
как то влияет на удаление дока наглухо с 1с ?) |
|||
81
nodrama
15.08.22
✎
16:51
|
элемента справочника
|
|||
82
СеменовСемен
15.08.22
✎
16:52
|
по теме (0) удалось тесты провести? есть прирост?
|
|||
83
Кир Пластелинин
15.08.22
✎
16:57
|
(80) эксперимента ради - создай тестовый справочник и тестовый рсв с измерением, для которого установи флаг "Ведущее" (тип - наш новый справочник). создай элемент, добавь запись в рсв с этим элементом, удали элемент справочника (без флагов и прочего). а потом посмотри - что осталось в таблице рсв. и вот если не путаю, то как раз обменданным.загрузка отключает очищение всех этих "вспомогательных" данных
|
|||
84
nodrama
15.08.22
✎
16:59
|
(82) 50-он сообщение
|
|||
85
nodrama
15.08.22
✎
17:00
|
(83) Так у меня нету вспомогательных данных...
у меня элемент справочника номенклатура. там только название и артикул и ставка ндс из справочника.. ни в какой рсв по ней ни чего не записано |
|||
86
Ёпрст
15.08.22
✎
17:05
|
(85) Извини, но ты занят какой-то х..ней.
Что создание, что удаление, напрямую в скуле для такого объема займёт секунды, ты же занят непойми чем. |
|||
87
Kassern
15.08.22
✎
17:06
|
(86) Это же надо скуль открывать и прямые запросы писать, а в лиц соглашении черным по желтому написано, что так делать ай яй яй)
|
|||
88
nodrama
15.08.22
✎
17:08
|
(86) Да я не умею писать на SQL запросы, че ты хочешь то )) я вкурсе что в sql это будет быстрее..
Я там умею только лог почистить) ну грохнуть что нибудь без отборов и т.д. Ну вот расскажи мне.. как мне в SQL найти дубли наименований + артикл.. то есть если и артикул и наимееование одинаковое При этом после этого из этих двух одинаковых позиций нужно удалить только ту, по которой не было движений (поступлений там продаж, установок цен и тд) |
|||
89
Кир Пластелинин
15.08.22
✎
17:09
|
(85) да просто проверь. делов то
|
|||
90
nodrama
15.08.22
✎
17:09
|
я могу в sql грохнуть вообще всю номенклатуру под "0" )))) много ума не надо)
|
|||
91
СеменовСемен
15.08.22
✎
17:09
|
(88) селект не нужно прямым делать. в 1с селект и так прямо транмлируется
|
|||
92
nodrama
15.08.22
✎
17:10
|
(89) да проверил. разница и правда лучше... если написать обменданными.запись=истина... но опять же не критичная... в паре тройку секунд
|
|||
93
nodrama
15.08.22
✎
17:11
|
(91) (86) Да не знаю я как в sql написать запрос.. если это так легко и быстро, то накидайте я в тестовой тестану
Мне надо для начало удалить номенклатуру дубли, где артикул и наименование одинаковые между друг другом. |
|||
94
nodrama
15.08.22
✎
17:12
|
потом нужно удалить номенклатуру где одинаковые артикулы (при этом пустые не учитывать) ибо есть позиции с пустыми артикулами
при этом нужно учесть во всех вариантах что номенклатуру по которой было движение удалять не стоит) |
|||
95
DTX 4th
15.08.22
✎
17:31
|
(93) Тебе все уже написали в (9) же.
Отличия только в DELETE. Остальная часть запроса может быть такой же как у 1С. |
|||
96
Ёпрст
15.08.22
✎
17:32
|
(94) Получаешь селектом табличку, где count>1 при group by наименование и артикул, потом delete ту, которая нот ин (селект номенклатура из нужного регистра) всё.
|
|||
97
YFedor
15.08.22
✎
17:34
|
Монопольный режим так и не попробовал?
|
|||
98
Kassern
15.08.22
✎
17:36
|
(96) а как потом проверить, что из 6лямов номенклатуры ничего лишнего не удалилось?) Где в вашем варианте проверку на ссылки к другим таблицам? "при этом нужно учесть во всех вариантах что номенклатуру по которой было движение удалять не стоит)"
|
|||
99
Ёпрст
15.08.22
✎
17:42
|
(98) при любой схеме учета, номенклатура всегда торчит в одном регистре (обычно, товарынаскладах), максимум в 2-х разных, если какая то стороння, типа на комиссии. Проверять остальное смысла нет
|
|||
100
nodrama
15.08.22
✎
17:42
|
(98) вот и я про тоже. Где в sql проверить были ли движения по ней и стоит ли установка цен или нет. Выбрать однинаквлые по артикулу это пол беды
|
|||
101
Ёпрст
15.08.22
✎
17:44
|
Можно и не в регистре проверить, а в табличной части дока, их будет всего пара - приход и возврат от покупателя, максимум, оприходывание, если есть
|
|||
102
nodrama
15.08.22
✎
17:45
|
(99) правильно товары на складах. Только нужно проверить не остатки а были ли движения. Так это мне сюквелом ещё надо проверить доки была ли эта номенклатура ). Так я совсем запутаюсь
|
|||
103
nodrama
15.08.22
✎
17:46
|
(97) монопольный попробую. Уже убежал с работы. Но помню про него.
|
|||
104
Ёпрст
15.08.22
✎
17:46
|
(102) в чем запутаешься ? в запросе к одной табличке регистра ?
|
|||
105
Ёпрст
15.08.22
✎
17:47
|
А можно еще тупее, удалить по min(_idref)
|
|||
106
Ёпрст
15.08.22
✎
17:48
|
Точнее, минимум оставить, а удалить максимум с ссылки
|
|||
107
Kassern
15.08.22
✎
17:48
|
(104) Если говорить о номенклатуре, то там полно регистров. Это и цены номенклатуры, и Аналитики различные, штрихкоды, сегменты и т.д.
|
|||
108
DTX 4th
15.08.22
✎
17:48
|
(100) Да еп..
Проверяй в 1С. Удаляй в скуле. |
|||
109
Kassern
15.08.22
✎
17:49
|
(108) можно из 1с выплюнуть тот же csv файл с кодами товаров для удаления. А потом уже его прочитать во временную таблицу, ее к номенклатуре прикрутить и грохнуть данные.
|
|||
110
Kassern
15.08.22
✎
17:50
|
Самый идеальный вариант, это пометить на удаление именно те позиции, которые 100% будут удалены и ссылок не имеют. Тогда простой запрос с отбором на пометку удаления
|
|||
111
DTX 4th
15.08.22
✎
17:51
|
(109) Это было сказано еще в (9)
Тут, видимо, проблема гораздо глубже) Да даже временная таблица не нужна. Я прям строки через запятую передаю в подобных случаях) |
|||
112
Kassern
15.08.22
✎
17:54
|
(111) пробовали так для 1кк позиций и более?
|
|||
113
nodrama
15.08.22
✎
17:57
|
(110) так блин. В том то и проблема. Что бы пометить на удаление такое же количество номенклатуры. Это столько же времени. Пометка на удаление.
Записать. Делается не быстреее. Чем удалить () |
|||
114
yopQua
15.08.22
✎
17:58
|
все не читал, но судя по названию темы, вы все таки смогли успешно перенести 4.5 млн позиций в базу из прошлой темы про ускорение загрузки?)
|
|||
115
DTX 4th
15.08.22
✎
18:00
|
(112) Разбить на десять запросов?
Ну короче, это уже дело техники. Я не знаю, как из csv во временную табличку в скуле загрузить. Как? |
|||
116
Kassern
15.08.22
✎
18:01
|
(115) с помощью OPENROWSET попробовать https://docs.microsoft.com/ru-ru/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver15
|
|||
117
yopQua
15.08.22
✎
18:02
|
(115) ТСКЛем наверно
а вобще если есть возможность сделать нужный отбор на скл, то это и использовать |
|||
118
DTX 4th
15.08.22
✎
18:03
|
(116) Спасибо. Надеюсь, не пригодится :)
Да, конечно, если файл большой, то лучше читать его инструментами, которые предназначены для этого. |
|||
119
nodrama
15.08.22
✎
18:06
|
(114) да загрузилось норм. Теперь все в нужных папках и категориях.)
|
|||
120
nodrama
15.08.22
✎
18:07
|
А в скуле в таблицах есть поле какое то по которому можно понять что данная позиция создана позже чем другая. И следовательно ее нужно удалить
|
|||
121
СеменовСемен
15.08.22
✎
18:12
|
(120) по коду можно ориентироваться, в крайнем случае по гуиду
|
|||
122
yopQua
15.08.22
✎
18:13
|
(120) есть _Version например или ссылка Ref, но они шестнадцатиричные, сравнивать на больше меньше думаю можно, муторно правда
|
|||
123
СеменовСемен
15.08.22
✎
18:14
|
(122) кому муторно?
|
|||
124
yopQua
15.08.22
✎
18:14
|
хотя..
|
|||
125
nodrama
15.08.22
✎
18:15
|
(121) код. Не число. А строка. Это что бы автоматом сравнивать коды на больше меньше. Надо их сделать числом. А там буковки в начале есть. Надо удалять. Это ещё плюс к мароке и времени
|
|||
126
СеменовСемен
15.08.22
✎
18:15
|
(125) с каких пор нельзя сравнивать строки?
|
|||
127
nodrama
15.08.22
✎
18:16
|
Ладно завтра в тестовой базе попробую через скуль что нибудь сделать. Будем на связи ) всем спасибо
|
|||
128
yopQua
15.08.22
✎
18:16
|
(125) ну ссылку можно взять, стремно показалось, что они увеличиваются всквозную по базе, а не отдельному справочнику, _Version вроде по справочнику
|
|||
129
yopQua
15.08.22
✎
18:17
|
(126) н де, да сравнивать то можно, только результат какой будет?
|
|||
130
nodrama
15.08.22
✎
18:17
|
(126) сравнивать строки с буквами на больше меньше ?)
|
|||
131
yopQua
15.08.22
✎
18:18
|
(130) да! это же один С, она все может **мнение буха
|
|||
132
nodrama
15.08.22
✎
18:19
|
(131) это да. Не напоминай. Это точно так же. Ну ты же программист выбери мне пылесос
|
|||
133
DTX 4th
15.08.22
✎
18:21
|
(120) Нет. Все те же поля, что и в предприятии +/-
|
|||
134
yopQua
15.08.22
✎
18:22
|
(132) не поверишь, у меня с пылесосом так и было! лет много назад, правда я одмином был, но один хрен логика железная)
|
|||
135
vis_tmp
15.08.22
✎
19:12
|
(8) Я проверял - быстрее.
|
|||
136
Bigbro
16.08.22
✎
04:33
|
если ссылок нет грохай в скуле и все.
|
|||
137
Bigbro
16.08.22
✎
04:35
|
(130) ты реально не знаешь как выполняется сравнение строк или прикалываешься?)
|
|||
138
Salimbek
16.08.22
✎
10:27
|
(4) "С чего вдруг запись в транзакции должна быть быстрее?"
С того, что вместо Создаем Запись - Пишем на Диск - Создаем Запись - Пишем на Диск - Создаем Запись - Пишем на Диск - ... Переходим к Создаем Запись - Создаем Запись - Создаем Запись - Создаем Запись - Создаем Запись - Создаем Запись - Пишем большой блок на Диск - ... |
|||
139
nodrama
16.08.22
✎
10:29
|
Тестирую удаление на 100к позиций из папки ном в иерархии.. не суть.
запросом, выбрал нужную ном из нужных папок. получил 102к количества. Далее со всеми возможными штуками обменданными.загрузка истина и транзакцией по 2к штук (ради теста). поставил удаление. поставил ушел курить... прихожу через минут 5-10. удалилась давольно быстро. Открываю справочник, эту папку во втором окне смотрю и да пусто... открываю первое окно с обработкой удаление.. а оно еще висит. подумал что за бред. папка пустая а обработка все висит. Открываю журнал регистрации. и вижу строчки Данные.Удаление и следователньо позиция номенклатуры.. то есть грубо говоря еще удаляет. То есть получается транзакция у меня по 2к строк. в номенклатуре в папке уже "0" то есть я их уже не вижу. Но обработка работает и до сих пор в журнал записывается удаление. Причем транзакция по "пакетам" работает я ее тестил то есть фиксирует по количеству указанному |
|||
140
nodrama
16.08.22
✎
10:37
|
Если он не удалил еще всю номенклатуру, почему тогда в папке ее уже нет? ни глазами, "ни запросом"
Если порция транзакции 2к, то почему до сих пор в журнал регистрации пишется удаление и обработка все еще работает. |
|||
141
Salimbek
16.08.22
✎
11:58
|
(140) А фиг знает, что и откуда там ТВОЯ программа удаляет. Может пытается удалить то, что уже удалено, падает с ошибкой, а ты в обработке исключений заставляешь ее выполнить эту операцию еще раз.
|
|||
142
nodrama
16.08.22
✎
12:33
|
Так ладно с удалением понятно удаляет более менее норм 100к позиций минут за 15.. приемлемо...
А как оптимизировать теперь проверку на движения... Есть запрос, который отбирает дубли по артиклу. и выводит. список дублей всего их 2кк, это и правильная позиция и дубль. Дубли надо удалять только из определенного родителя. следовательно остается 1кк дублей истенных. Ноооо по этим 1кк реальных дублей, могут быть движения (поступление товаров как минимум). следовательно такие удалять не стоит)) ибо объект не найден нам не нужен. Следовательно 1кк дублей, нужно проверить как минимум по регистру ТоварыНаСкладах Как продуктивнее это сделать? там же в запросе или при удалении каждую позицию проверять по регистру накопления? |
|||
143
Bigbro
16.08.22
✎
12:34
|
поиск ссылок работает почти с одинаковой скоростью для 1 элемента и для 10к элементов.
|
|||
144
nodrama
16.08.22
✎
12:36
|
(143) ну то есть я запросом отбираю дубли которые считаю надо грохать. остается 1кк
и далее при удалении ищу на каждый дубль ссылку? если нет то грохю |
|||
145
СеменовСемен
16.08.22
✎
12:40
|
(138) скуль работает не так
Гугли про журнал транзакций и чекпойнт |
|||
146
Bigbro
16.08.22
✎
12:43
|
я не знаю как отработает поиск ссылок если ему передать массив 1кк элементов. может повиснет насмерть.
при таких объемах лучше самому искать наверное. |
|||
147
nodrama
16.08.22
✎
12:48
|
(146) Как ты предлагаешь мне обработать 1кк номенклатуры на поиск ссылок руками ?)
может эти 1кк номенклатуры програть в РН товары на складах (за определенный период). типо если нет значит удаляепм если есть ну значит есть |
|||
148
Kassern
16.08.22
✎
12:49
|
(147) а что, на другие регистры пофиг?) Если это УТ11, то я бы ключи аналитики смотрел в первую очередь и иже с ними.
|
|||
149
Bigbro
16.08.22
✎
12:52
|
(147) самому имеется в виду не использовать ПоискСсылок() от 1с
а писать свои обработки которые будут как то частями проверять и лопатить не по всей базе а только там где ссылки могут быть. |
|||
150
nodrama
16.08.22
✎
12:52
|
(148) так у нас там ни чего нет если не было ни каких поступлений на склад. значит нет ни картинки, ни установки цен, ни каких то файлов, ни чего.
|
|||
151
Bigbro
16.08.22
✎
12:53
|
ну и опять же миллионы записей наводят на мысли делать все что надо сделать напрямую в скуле.
это может быть на пару порядков быстрее. |
|||
152
nodrama
16.08.22
✎
12:54
|
(151) я так и не понял как в скуле проверять на движение допустим товаров на складах
отобрать в скуле дубли по артиклу это одно. а проверить их потом по РН это уже другое) |
|||
153
СеменовСемен
16.08.22
✎
13:20
|
(152) делал поиск неиспользуемых 1 запросом.
работает быстрее чем найти по ссылкам https://drive.google.com/file/d/1CBzki0Hqn2GyxgyXvf7IxmEcf38XYGyA/view?usp=sharing |
|||
154
nodrama
16.08.22
✎
13:55
|
(153) благодарю
Кстати интересно а как "количество" порций в транзакции влияет на время?? на малых количествах 10-100-1000... ни как не влияет.. то есть если записей 1000 то хоть разбй их по 10 хоть по 100. хоть сразу в одну транзакцию.. время не меняется (ну может мили секунды). А если речь идет о 1кк (протестировать на 1кк нет возможности). если 1кк разбивать допустим по 10к порций или по 30к порций.. будет ли какая-то разница?) |
|||
155
TormozIT
гуру
16.08.22
✎
14:08
|
(153) Забыл про общие реквизиты, системные поля, системные табличные части, регистры расчета и бухгалтерии. Отчасти поэтому оно и работает быстрее универсального поиска.
|
|||
156
Salimbek
16.08.22
✎
14:10
|
(145) А х.з., вот тут транзакции ускорили запись на 25% https://курсы-по-1с.рф/news/2017-03-27-four-methods-of-write-acceleration/#recording-in-transaction-not-used
|
|||
157
nodrama
16.08.22
✎
14:10
|
Вопрос...
Если началась транзакци... потом закрылась 1с.. не дойдя до завершитьтранзакцию или отменитьтранзакцию То она потом сама вернет все в зад или надо что то делать? |
|||
158
Kassern
16.08.22
✎
14:11
|
(157) вернет все в зад, так как данные не записались в таблицу.
|
|||
159
Kassern
16.08.22
✎
14:12
|
это как документ, вы можете в нем править что угодно, но пока вы его не запишите (зафиксируете транзакцию) данные в базе не обновятся.
|
|||
160
nodrama
16.08.22
✎
14:13
|
(159) А если сервер ребутнулся еще в этот момент, то все равно вернет или уже нет?
|
|||
161
nodrama
16.08.22
✎
14:15
|
я сделал пакет по 50к..
запустил... пошла транзакция... до 50к она не дошла поэтому фиксации не было. сначала закрылась 1с... че то там админ химичет с сервером... я открыл заного. запустил обработку... Но выскачила ошибка.. транзакции не помню дословно но что то из серии не возможно начать транзакцию или блокировка не помню.. видимо потому что та еще шла. А потом сервер вообще ребутнулся |
|||
162
Kassern
16.08.22
✎
14:18
|
(160) вот вы правите документ, указывает организацию и контрагента и в этот момент у вас вырубается комп. Вопрос, документ будет записан в базу? Вот тут так же
|
|||
164
Ёпрст
16.08.22
✎
14:37
|
(152) ну как маленький, на вот, удаляй сколько влезет:
delete from _Reference12345 --подставишь свой справочник where _IDRRef in ( select max(_Reference12345._IDRRef) from _Reference12345 where Fld12345<>'' group by _Description,Fld12345 --подставишь своё поле с артикулом where Fld12345<>'' having COUNT (_IDRRef)>1) |
|||
165
Ёпрст
16.08.22
✎
14:42
|
в group by еще и ,_Folder воткнуть, мало ли, ты там налепил групп с одинаковым наименованием и артикулом
|
|||
166
uno-group
16.08.22
✎
15:55
|
(113) может просто пометить скл все дубли на удаление. потом средствами 1с удалить что удалиться и скл снять пометки на удаление.
Мололи может товар только набрали. заказывают. пришел на склад и т.п. |
|||
167
uno-group
16.08.22
✎
15:57
|
И вопрос а точно нужно искать дубли артиклей и наименований или можно все товары пометить отменить пометку для созданных за последние несколько дней и средствами 1с грохнуть все что негде не используется. Точно нужно реле которое хотели заказать но так никогда и не заказывали и не продавали даже если у него нет дубля.
|
|||
168
nodrama
16.08.22
✎
16:13
|
(167) так база новая. в которую сливатся номекнлатура. из прайсов и сторонней базы (где она правильная по группам). далее выверенная правильная номенклатура уже пойдет на сайт
Откуда они знают будут заказы или не будут) это не повод не выкладывать на сайт позиции, там сроки доставки указываются с учетом покупки у китая) |
|||
169
nodrama
16.08.22
✎
16:16
|
в общем я уже поставил на удаление 1кк номенклатуры. посмотрим вроде 200к уже удалилось. думаю за сегодня пройдет)
|
|||
170
nodrama
16.08.22
✎
16:26
|
Нормельное идет... когда писал 169 соощение было 1.020 миллиона.
Сейчас уже 920 тысяч. ;) |
|||
171
xkanix
16.08.22
✎
17:02
|
(4) > С чего вдруг запись в транзакции должна быть быстрее?
Платформа на commit'е выполняет некоторые действия. Если писать X объектов каждый в своей транзакции - эти действия будут выполнены X раз, а если в одной - один. |
|||
172
СеменовСемен
16.08.22
✎
17:34
|
(171) а подробней? что за действия?
|
|||
173
valerivp
16.08.22
✎
22:21
|
(0) в файловой базе в транзакции сильно быстрее операции выполняются. ибо только в ОЗУ
в серверной - транзакция не влияет на скорость |
|||
174
nodrama
17.08.22
✎
14:09
|
(173) у нас серверная.
Не влияет на скорость, но хотя бы не уменьшает ее ?) |
|||
175
СеменовСемен
17.08.22
✎
14:11
|
(174) чутка уменьшает ибо блокировочки то держатся до конца трпнзакции
|
|||
176
nodrama
17.08.22
✎
14:13
|
(175) (173) Получается сколько людей столько и мнений... так как в двух темах есть люди которые "за" транзакции...
но на сколько я понял они аппилируют во сновном... темой... из серии записи на диск.. можно 10к файлов, записывать на диск 10к раз А можно эти 10к файлов, типо объеденить в 1 большой и записать 1 раз. И в случаи с виндой это быстрее... Банально если разархивировать 10к маленьких файлов или 1 файл такого же объема как 10к маленьких... то 1 файл разахивируется быстрее )) я образно . хотя объем у них одинаковый |
|||
177
nodrama
17.08.22
✎
14:19
|
Ладно вернемся к нашим баранам...
Собственно тесты продолжаются ;) сейчас запрос готов. я там учел все что мне надо. и конкретные папки, и заполненные артикулы ну и прочие штуки которые нужны... Конечный результат запроса //тут еще запрос, но он не важен отбираю дубли. |ВЫБРАТЬ | Дубли.Артикул КАК Артикул, | Дубли.Ссылка КАК Ссылка |ИЗ | Дубли КАК Дубли"; Следовательно получаю список дублей(ссылок номенклатуры) которые реально дубли. Осталось эти позиции проверить по РН ТоварыНаСкладахОбороты, то есть если эта номенклатура фигурировала там то следовательно пропускаем ее. Я вот думаю, может это дописать как то в конечный запрос. или засунуть результат запроса в массив и сделать следующий запрос по РН этому со списком из первого запроса думаю перебирать в цикле каждую из позиций дубля, на наличия ее в РН будет явно дольше |
|||
178
СеменовСемен
17.08.22
✎
14:20
|
(176) тесты все решат. Но никто их не делает
|
|||
179
СеменовСемен
17.08.22
✎
14:22
|
(176) мс скуль - это вообще как ос внутри ос. Там и управление памятью свое и диском
|
|||
180
nodrama
17.08.22
✎
15:18
|
Конечно с проверкой номенклатуры по РН товаров, в разы дольше работает.... видимо если проверку по РН сделать в запросе в том же где дубли бдует быстрее
|
|||
181
СеменовСемен
17.08.22
✎
15:19
|
(180) ну так и сделай в конце
где НЕ ссылка в (выбрать из регистра) |
|||
182
nodrama
17.08.22
✎
15:31
|
вроде сделал. сейчас посмотрю на сколько долго такой запрос будет по отношению к запросу без проверки по регистру.
а то может и смысла нет) |
|||
183
nodrama
17.08.22
✎
15:44
|
Короче
из 1.122к позиций 1120096 1120439 в регистра меньше 300 штук. Запрос на проверку с регистром и без. отраатывает практически одинаковое количество времени разница вообще не значительная ;) я так понимаю если в первом варианте количества позиций меньше ) значит проверку по регистру в запросе я сделал верно))) |
|||
184
nodrama
17.08.22
✎
15:46
|
Я так добавил
ГДЕ НЕ Дубли.Ссылка в (ВЫБРАТЬ | ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура |ИЗ | РегистрНакопления.ТоварыНаСкладах.Обороты(&Период1, &Период2, Авто, ) КАК ТоварыНаСкладахОбороты) |
|||
185
uno-group
17.08.22
✎
16:31
|
Реально думаешь что кто то набил миллион левых записей и потом из них юзал только 300. Есть смысл так сайт перегружать.
|
|||
186
uno-group
17.08.22
✎
16:32
|
проверь средствами 1с несколько позиций может они еще где то задействованы кроме товарынаскладахобороты. и ты просто выбрал не верный критерий того что позиция используеться
|
|||
187
nodrama
17.08.22
✎
16:34
|
(185) Ни кто не набивал позиции. Номенклатура сливалась из двух других баз + прайсы поставщиков.
Ранее и я так понимаю не очень "удачно".. Из 5 миллионов номенклатуры, по артикулам+ наименованию получился 1 миллион дублей. А эти 300 позиций которые "УЖЕ" используются... в полне реально. Так как в было всего штук 20 поступлений и штук 10 реализаций. Организация новая |
|||
188
nodrama
17.08.22
✎
16:43
|
(186) Смысл в том что это все импорт и сроки доставки не 1 день ессесно и не 2-а. и на складе в 90% случаев товара нет. 50% юр лица 50% физ лица..
для физ лиц и сделали сайт. выкладывать туда только 300 товаров со склада нет смысла, потому что товар специфичный и кому надо готов ждать и неделю и две и три. так как цена дешевле чем на сайтах у кого есть в наличии грубо говоря. Следовательно хотят сделать норм номенклатуру и вывалить на сайт для возможности оформлять заказ.. поэтому и такая ситуация как то так |
|||
189
Salimbek
17.08.22
✎
17:28
|
(188) Тогда я бы вам рекомендовал смотреть ссылки не только в Товародвижении, а еще и в Заказах, а то покупатель Заказ сделает, товар еще не приедет, а вы ссылку на товар уже грохнули. Потом тяжко будет вспоминать, что и кому должны привезти.
|
|||
190
nodrama
17.08.22
✎
17:32
|
(189) так заказов с сайта еще нет. сайт оффлайн
|
|||
191
nodrama
17.08.22
✎
17:33
|
сейчас только поступление реализация и заказы. введеные руками в базе от юр лиц.
в общем сложности документов 100 наверное вместе. при этом все заказы закрыты ;) |
|||
192
nodrama
17.08.22
✎
17:33
|
а так то понятна логика ваша
|
|||
193
nodrama
17.08.22
✎
17:36
|
Ну а установку цен я и не проверял. там реализована загрузку и из экселя и как угодно там ни кто руками не заполняет. если будут объекты не найдены. загрузят еще раз. на эти 300 позиций)
|
|||
194
nodrama
17.08.22
✎
17:36
|
на сайте все равно 0 товара в данный момент и сайт офф
|
|||
195
Фантазер
17.08.22
✎
17:50
|
А таки удаление через свой код быстрее чем стандартное Удаление из программы?
|
|||
196
СеменовСемен
17.08.22
✎
17:59
|
(195) что за "Удаление из программы"
|
|||
197
Фантазер
17.08.22
✎
18:09
|
(196) Стандартная функция из Обслуживания - Удаление помеченных объектов.
|
|||
198
СеменовСемен
17.08.22
✎
18:53
|
(197) так она же все ссылки ищет.
Оно никак не может быстрее 1 запроса работать. Ибо все найденные сслыки со скуля возвращаются |
|||
199
Shur1cIT
18.08.22
✎
09:06
|
(0) если бы семерка былабы там действительно быстрее в транзакции
|
|||
200
formista2000
18.08.22
✎
09:38
|
200!
|
|||
201
nodrama
18.08.22
✎
10:03
|
(197)
Запрос на дубли (с отборами нружных папок в иерархии) со сравнением артикла и наименование далее с проверкой на вхождение их в РН товары на складах Все это в одном запросе Далее результат.выгрузить И далее в транзакции пакетами по 50к штук Удалил 1.120.000 позиций, за пол дня. Не так уж и плохо. "без Монопольного режима, но в базе был 1 человек который делал отгрузочные новые доки для контрагентов" А стандартная функция удаление помеченны объектов это в любом случаи дольше. Так как сначала нужно будет провести все те же манипуляции выше, только вместо удалить().. будет пометканаудаление.истина , записать(). то есть нужно будет 1кк номенклатуры прогнать, пометить и записать А потом еще запустить стандартное удаление. которое будет проверять на ссылки (даже если их по факту нет) и далее еще удалять ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |