|
Ускорить загрузку номенклатуры когда ее 4.500.000 | ☑ | ||
---|---|---|---|---|
0
nodrama
08.08.22
✎
13:18
|
в базе 1с 700.000 номенклатуры.
Во второй базе 4.500.000 номенклатуры Проверяю по артиклу есть ли в первой базе позиция и если нет кидаю ее из второй базы. большей части нету поэтому расчеты примерно такие В среднем за 1 секунду, вижу что создается 5-7 новых позиций. 4.500.000 /7 = 642 857 секунд Это получается 7.5 суток. При этом надо надеется что за 7.5 суток не знаю свет не вырубится на долго (есть бесперебойник минут на 30-40 хватает). или не знаю мало ли что сервер ребутнется/зависнет и т.д. Есть какие то мысли как ускорить загрузку (кроме как купить еще более новый сервер)) |
|||
1
Krendel
08.08.22
✎
13:18
|
200к
|
|||
2
YFedor
08.08.22
✎
13:19
|
Конфигурации идентичные?
|
|||
3
Krendel
08.08.22
✎
13:20
|
Сколько сервак выдает по гилеву? какова скорость работы рейда?
|
|||
4
СеменовСемен
08.08.22
✎
13:21
|
(0) чтоб свет не влиял переноси через план обмена
|
|||
5
СеменовСемен
08.08.22
✎
13:22
|
Можно ускорить сделав обмен многопоточным
|
|||
6
nodrama
08.08.22
✎
13:22
|
(4) да свет это к слову так на всякий случай
|
|||
7
Timon1405
08.08.22
✎
13:23
|
||||
8
nodrama
08.08.22
✎
13:25
|
(7) в этом примере идет через ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
я че то сыкую 4.5 миллиона позиций с данными и т.д. выгружать сразу... у меня через Выполнить().Выбрать(). и далее пока следующий(). |
|||
9
mistеr
08.08.22
✎
13:25
|
(0) Если там не 100500 связанных объектов, то это кривой код у тебя. Через КД2 будет на порядок быстрее.
|
|||
10
СеменовСемен
08.08.22
✎
13:26
|
(8) выбрать и выгрузить разницы на x64 нет
|
|||
11
mistеr
08.08.22
✎
13:27
|
(10) Нигде нет разницы.
|
|||
12
СеменовСемен
08.08.22
✎
13:27
|
На 32 выбрать делало через файл большие выборки
|
|||
13
nodrama
08.08.22
✎
13:27
|
(9) там кода 5 строк..
проверка по артиклу если нет то создаем новую позицию и все.. я так понимаю что сама проверка по артиклу с каждым разом все дольше и дольше ибо номенклатуры все больше и больше. но без проверки будут дубли |
|||
14
mistеr
08.08.22
✎
13:28
|
(12) Любое обращение к результату запроса грузит в память всю выборку.
|
|||
15
СеменовСемен
08.08.22
✎
13:28
|
(13) если индекс есть, то разницы нет
|
|||
16
mistеr
08.08.22
✎
13:29
|
(13) >создаем новую позицию
Скорее всего тут и тормозит |
|||
17
Ботаник Гарден Меран
08.08.22
✎
13:29
|
Надо начать с количества записей в транзакции.
|
|||
18
RomanYS
08.08.22
✎
13:30
|
(13) Запрос в цикле по каждому артикулу?
|
|||
19
СеменовСемен
08.08.22
✎
13:30
|
А что замер говорит, какая операция самая долгая?
|
|||
20
Garykom
гуру
08.08.22
✎
13:30
|
(0) Наймите нормального грамотного программиста
ЗЫ Ты там не через COMОбъект случайно? |
|||
21
YFedor
08.08.22
✎
13:31
|
(13) Кто мешает сначала взять все артикулы, которые есть в загружаемой базе (их же немного) натравить на базу из которой загружаем и там пометить каким-либо образом те объекты, которые нужно выгрузить.
А потом забирать только их не проверяя каждый раз в приемнике. |
|||
22
СеменовСемен
08.08.22
✎
13:32
|
(21) тормозит запись, а не поиск
|
|||
23
YFedor
08.08.22
✎
13:32
|
(22) Да хрен его знает что там тормозит
|
|||
24
СеменовСемен
08.08.22
✎
13:32
|
Ну и желательно при записи всякие версионирования отключать, может даже и жр
|
|||
25
nodrama
08.08.22
✎
13:34
|
Другой вопрос. а как можно узнать (не заходя в ЖР поиска там).
Когда создалась определенная номенклатура? или только по ЖР? |
|||
26
Фрэнки
08.08.22
✎
13:34
|
Запись и тормозит. Если версионирование включено, то и оно тоже.
В транзакциях нужно записывать. Порциями. |
|||
27
RomanYS
08.08.22
✎
13:35
|
(25) Если есть версионирование, то лучше там
|
|||
28
СеменовСемен
08.08.22
✎
13:37
|
(26) транзакции кмк только на 77 ускоряли.
На 8 все равно транзакция сначала в журнал скл на диск пишется |
|||
29
6awkup_true
08.08.22
✎
13:40
|
ОбменДанными.Загрузка = Истина? мож там 100500 проверок еще при записи, вот и увеличивает время
|
|||
30
nodrama
08.08.22
✎
13:42
|
Если записывать в транзации порциями и поставить обменданными.загрузка=истина
это на много ускорит ? если разница будет между 7.5 днями и 7 днями )) то смысла дергаться даже нет. |
|||
31
nodrama
08.08.22
✎
13:42
|
(27) версии по номенклатуре не ведутся
|
|||
32
dmt
08.08.22
✎
13:46
|
(30) + в несколько потоков запустить
|
|||
33
6awkup_true
08.08.22
✎
13:47
|
(30) ОбменДанными.Загрузка может существенно ускорить при условии того, что будут отключены все проверки(например, на дубли), все подписки и прочее ненужное. если всего это нет - то не ускорит
|
|||
34
СеменовСемен
08.08.22
✎
13:48
|
(30) замер то когда запустишь?
|
|||
35
nodrama
08.08.22
✎
13:49
|
(34) так что бы запустить замер нужно выключить загрузку ;) а то замер будет не правильный. загрузка то идет.
|
|||
36
nodrama
08.08.22
✎
13:50
|
сейчас встал вопрос. как без версифицирования вот узнать когда номенклатура создана? искать по ЖР? хочу проверить кое что
|
|||
37
dmt
08.08.22
✎
13:51
|
||||
38
Aleksey
08.08.22
✎
13:51
|
(35) зачем?
|
|||
39
RoRu
08.08.22
✎
13:53
|
(35) на копии никак? )))
в чём тогда вообще смысл вопроса, если загрузка идёт всё равно )))? |
|||
40
СеменовСемен
08.08.22
✎
13:53
|
(35) если из конфигуратора запускал предприятие, то ничего перезапускать не нужно.
Да и вообще я бы уже давно остановил такую загрузку |
|||
41
Djelf
08.08.22
✎
13:57
|
(35) А какая тебе разница? Заново загрузится не может из-за проверки по артикулу. См. (0).
Боюсь спрость: не всё в одной транзакции? 5-7 позиций в секунду, ну... такое надо отменять сразу же, это ты где-то накосячил, так быть не должно! |
|||
42
Shur1cIT
08.08.22
✎
13:58
|
(0) объединял два документооборота? цифры примерно похожие были, запускал в несколько потоков, причем чтобы отслеживать статус потоков для каждого потока в каждом потоке генерировал HTML страницу и записывал, при обновлении на клиенте этой сранице видел сколько загружено и сколько осталось;-)))
|
|||
43
Kassern
08.08.22
✎
13:58
|
(0) я бы попробовал следующим образом, разбил бы ваши 4.5кк номенклатуры на несколько частей. Далее бы эти части параллельно бы запустил на загрузку (разными фоновыми заданиями например). Проверку бы по артикулу на нахождение в базе приемнике сделал бы одним запросом со временной таблицей.
|
|||
44
Kassern
08.08.22
✎
13:59
|
(43) + и запись в режиме обмена данными
|
|||
45
nodrama
08.08.22
✎
14:05
|
(39) В том что это не разовая штука
|
|||
46
nodrama
08.08.22
✎
14:05
|
А если через универсальный обмен загрузка XML ? базы то идентичные
|
|||
47
Krendel
08.08.22
✎
14:07
|
(45) У тебя будет целовое время
|
|||
48
nodrama
08.08.22
✎
14:08
|
через универсальный обмед xml быстрее не будет ? я могу кинуть во второй базе (все ном группы в папку "выгрузка").
создать в первой базе папка "выгрузка". следовательно при загрузке он должен всю номенклатуру закинуть в папку выгрузка ну и далее по папкам. |
|||
49
Kassern
08.08.22
✎
14:11
|
(46) в любом случае нужно будет правило обмена писать. А там с номенклатурой много чего другого интересного тянуть надо. Это и картинки и упаковки, а для картинок еще и регистры сведений тянуть и т.д.
|
|||
50
nodrama
08.08.22
✎
14:14
|
(49) там пустая номенклатура.
наименование, вид, ставка, ед измерения наименованиеПолное. |
|||
51
nodrama
08.08.22
✎
14:15
|
смысл что бы перенести ее всю, так как есть в правильные папки и подпапки и подпапки под папки.
картинки и т.д. это потом из другого места |
|||
52
Ёпрст
08.08.22
✎
14:31
|
(0) примитивный запрос на булке перенесёт секунд за 30, наверное
|
|||
53
Ёпрст
08.08.22
✎
14:32
|
4.5 млн это ни о чем..даже примитивный insert into select справится за несколько минут
|
|||
54
yopQua
08.08.22
✎
14:57
|
жахнуть через скл напрямую
|
|||
55
yopQua
08.08.22
✎
14:58
|
(52) +1, булккопи тоже должен решать быстро
|
|||
56
mikecool
08.08.22
✎
15:05
|
(11) недавно как раз столкнулся с https://its.1c.ru/db/v8std/content/725/hdoc
через объектную модель не грузит |
|||
57
kauksi
08.08.22
✎
15:09
|
Вариант грузить только те позиции, что есть на остатке, либо только те, по которым было движение в течении года-двух, поставив предварительно галку какую то. Запихать в табличный документ со всеми реквизитами, а дальше на 10 потоков распараллелить чтение и запись.
|
|||
58
YFedor
08.08.22
✎
15:12
|
(56) Я фигею с 1с очередной раз ...
Неправильно: Также неправильно: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Наименование, | Номенклатура.ВидНоменклатуры |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить(); // Обход результата запроса ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Обработка элемента выборки // ... КонецЦикла; Нафига тогда вообще запросы нужны |
|||
59
СеменовСемен
08.08.22
✎
15:12
|
(58) не каждый запрос правильный.
само наличие запроса не панацея |
|||
60
mikecool
08.08.22
✎
15:14
|
(58) дальше почитай, правильно "Выбрать первые 1000"
|
|||
61
mTema32
08.08.22
✎
15:28
|
(0) Мне кажется странной такая задача. Может дело не в скорости выгрузки, а в постановке задачи?
|
|||
62
mikecool
08.08.22
✎
15:30
|
помнится приходилось с таким сталкиваться, но решение приняли такое - есть обмен, которым в дальнейшем будем пользоваться , он отлажен
нового ничего не изобретаем , грузим пачками в несколько потоков закончится через неделю - ничего, зато не будем огребать каких либо ошибок |
|||
63
mikecool
08.08.22
✎
15:31
|
изобретать велосипед, отлаживать, грузить, потом проверять перенос - в тот же срок может выйти, а то и дольше при каких либо логических ошибках
|
|||
64
yopQua
08.08.22
✎
15:36
|
(62) ну ему видимо надо первичное заполнение сделать, потом по мере появления новых позиций они будут плавно перетекать в другую базу по обмену. а сейчас как всегда надо срочно и быстро.
скл спасет, перекодирование все той же многострадальческой номенклатуры в около 150тыс. позиций у меня сделал за секунды две. ну с полдня потратить придется наверно |
|||
65
Krendel
08.08.22
✎
15:38
|
(64) Ну 7 элементов справочника в секунду это долго
|
|||
66
Фрэнки
08.08.22
✎
15:41
|
(65) но еще и скрыто на какой типовой все эти кувырки происходят.
Может там и не типовая уже давным-давно, а потому нужно отрубить кучу всякого ненужного, что происходит в обработчиках и подписках вокруг записи элемента |
|||
67
Eiffil123
08.08.22
✎
15:41
|
кроме вышепредложенных, запись по 1000 новых элементов в транзакции и монопольно поможет ускорить выполнение
|
|||
68
Фрэнки
08.08.22
✎
15:48
|
при желании, можно прямо в коде замеры времени получать и регулировать количество элементов в транзакции в большую сторону, пока оценка не начнет ухудшаться
ЗамерВремени/Количество можно сравнивать с предыдущим. Начальное значение большое, а дальше вычислять. |
|||
69
СеменовСемен
08.08.22
✎
15:50
|
(67) а оно реально работает? кто-нибудь делал тесты?
|
|||
70
Фрэнки
08.08.22
✎
15:51
|
(69) работает
|
|||
71
Жан Пердежон
08.08.22
✎
15:51
|
(0) грузи сразу в скуль
|
|||
72
Фрэнки
08.08.22
✎
15:52
|
(69) но там другие недостатки, что лучше пользоваться транзакциями для ускорения только в монопольном режиме, т.к. другие сеансы могут получать блокировки в самых неожиданных местах.
|
|||
73
СеменовСемен
08.08.22
✎
15:55
|
(70) что-то я тестов никак не могу найти. Интересно делал ли кто-нибудь?
|
|||
74
СеменовСемен
08.08.22
✎
15:57
|
(73) и на 1с нет такой рекомендации для 8.
|
|||
75
Krendel
08.08.22
✎
16:40
|
(73) да
|
|||
76
СеменовСемен
08.08.22
✎
16:42
|
(75) и что какие результаты. во сколько раз ускорение?
|
|||
77
Krendel
08.08.22
✎
16:44
|
(76) запрещено к публичному разглашению
|
|||
78
scanduta
08.08.22
✎
16:45
|
(0) Поле артикул проиндексировано ?
Через что грузишь ? помоему через конвертацию такое точно в разы быстрее должно делаться как минимум |
|||
79
Fynjy
08.08.22
✎
16:47
|
(0) что тебе мешает на уровне SQL перенести таблицу?
|
|||
80
Garykom
гуру
08.08.22
✎
17:29
|
1. Запись в транзакции порциями по N элементов
2. Фоновые в несколько потоков 3. Сначала во внешнюю базу выкинуть оба справочника и там сравнить запросом оставив только те что надо записывать. Результат в CSV и читать из него по N. |
|||
81
Garykom
гуру
08.08.22
✎
17:31
|
(80)+ 4. ОбменДанными.Загрузка = Истина при необходимости
|
|||
82
nodrama
08.08.22
✎
17:32
|
Попробовал через УниверсальнуюЗагрузкуВыгрузку xml с отбрром по группе (выбрал 1 группу для теста).
Но не понятно там есть функция FastInfoSet . типо быстрее работает. Выгрузка через xml выгрузилось и загрузилось норм... выгрузка шла секунд 20. одной группы. Далее попробовал с галочкой фатсинфосет. выгрузилось секунд за 10.. то есть результат на лицо... А при попытки загрузки тут же выкинуло с ошибкой чтение xml и далее куча кода... при условии что быза типовые и обработка типовая и все типовое. |
|||
83
Garykom
гуру
08.08.22
✎
17:33
|
Еще более быстрые варианты это писать напрямую в sql базу что сложно.
Если база небольшая то выгрузка в DT (или "Выгрузить данные для перехода в сервис") добавить строчки и загрузить назад. |
|||
84
Garykom
гуру
08.08.22
✎
17:34
|
(82) гыгыгыгы
|
|||
85
nodrama
08.08.22
✎
17:40
|
(83) ну как не большая.. в базе 4.5 миллиона номенклатуры (без учета остальных документов, приходов, реализаций, и т.д.). как думаешь не большая ?
зачем фирме 4.5 миллиона позиций. если у них 1 реализация в год)))) |
|||
86
Garykom
гуру
08.08.22
✎
17:46
|
(80) п.3 это например https://habr.com/ru/post/547448/
или ms access если к mssql нет доступа и умений |
|||
87
Garykom
гуру
08.08.22
✎
17:46
|
(85) Автозапчасти там номенклатуры может быть еще больше а реализаций не много
DT сколько гигов? |
|||
88
Kassern
08.08.22
✎
17:46
|
(85) ну может у вас военка какая-нибудь и вы ведете учет НЗ на складах? Там вам несколькими доками наполнили склады и все, лет на 30 закрыли на клюшку)
|
|||
89
nodrama
08.08.22
✎
17:51
|
(87) я ни разу не пробовал выгружать базу в ДТ, в sql 180 гигов весит. сколько в ДТ беспонятия
|
|||
90
Kassern
08.08.22
✎
17:52
|
(89) примерно столько же, сколько бекап скуля сжатый в архиве.
|
|||
91
lodger
08.08.22
✎
18:00
|
(82) гыгыгыгы x2
|
|||
92
Конструктор1С
08.08.22
✎
18:45
|
(0) >>В среднем за 1 секунду, вижу что создается 5-7 новых позиций
Как-то чрезвычайно медленно. Стрельни замером. Может там тупые проверки в каких-нибудь подписках на события сидят. Или какая-нибудь тупая регистрация на обмен |
|||
93
Конструктор1С
08.08.22
✎
18:46
|
(89) это маленькая база
|
|||
94
VladZ
08.08.22
✎
18:57
|
(0) "4.500.000" - зачем столько?
|
|||
95
RomanYS
08.08.22
✎
19:07
|
(92) скорее тупой поиск по артикулу
|
|||
96
Злопчинский
08.08.22
✎
20:03
|
(95) поиск по индексу артикула по сравнению с записью объектов - на порядки быстрее должен быть...
|
|||
97
RomanYS
08.08.22
✎
20:42
|
(96) Если он идёт непосредственно в базе по каждому артикулу, то не на порядки.
|
|||
98
d4rkmesa
08.08.22
✎
20:55
|
(85) Ну про автозапчасти пример правильный, там действительно 1 реализация может быть. ) Маня не даст соврать. Кстати, он на этих загрузках номенклатуры собаку съел.
|
|||
99
Krendel
09.08.22
✎
08:39
|
(85) ценообразование сделать и на сайт отправить
|
|||
100
mistеr
09.08.22
✎
09:43
|
(82) Попробуй теперь через ЗагрузкаДанныхИзТабличногоДокумента, с поиском.
|
|||
101
ptiz
09.08.22
✎
09:52
|
(0) Ты сейчас пытаешься "сделать что-нибудь и как-нибудь" вместо обдумывания самой задачи в комплексе. Для чего эти переносы вообще? Исходи из постановки задачи.
|
|||
102
Krendel
09.08.22
✎
11:35
|
(101) Уже начал бы перегрузку, пока думает как решать задачу ;-)
|
|||
103
Salimbek
09.08.22
✎
13:24
|
(0) Запросом выбери всю Номенклатуру -> Артикула, которые есть у тебя в базе, положи это в Структуру.
Далее, перебирая свой файл смотри, есть ли твой элемент в этой Структуре. Это намного быстрее кучи запросов к базе. Вместо СТруктуры можно воспользоваться Таблицей значений и создать на ней Индекс по полю "Артикул". Создание элементов оберни в цикл, типа так: НачатьТранзакцию() Счетчик = 0; Цикл Счетчик = Счетчик + 1; Если Счетчик%50000 = 0 Тогда <- тут можно поиграться с размером ЗафиксироватьТранзакцию() НачатьТранзакцию() КонецЕсли КонецЦикла ЗафиксироватьТранзакцию() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |