Имя: Пароль:
1C
 
Удаление элементов справочников в транзакции.. реально ли быстрее?
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
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кк номенклатуры прогнать, пометить и записать
А потом еще запустить стандартное удаление. которое будет проверять на ссылки (даже если их по факту нет) и далее еще удалять )
Независимо от того, куда вы едете — это в гору и против ветра!