Имя: Пароль:
1C
1C 7.7
v7: Долго отрабатывает Спр.Записать() при большом количестве новых элементов..
,
0 Дегенератор идей
 
16.11.21
15:36
Конфигурация на базе типовой ТИС..
При загрузке из экселя большого количества новых элементов начинает тормозить.
Структура: Справочник "Номенклатура" и два подчинённых справочника "Цены" и "ЕдиницыИзмерения"
При загрузке используются транзакции, которые фиксируются после каждой 1000 элементов.
После 5000 начинает заметно тормозить и скорость падает.
Замер показывает следующее:

212    Спр.Записать();            75    228.873823    98.98 //Номенклатура, записываем новый элемент
220    СпрЕ.Записать();    76    0.028009    0.01  //Единицы, записываемый новый элемент
223    Спр.Записать()            76    0.015034    0.01  //Номенклатура, обновляем единицы измерения
233    СпрЦ.Записать();    76    0.174291    0.08  //Цены, записываем новый элемент с периодическими реквизитам

Почему так получается и что с этим сделать?
1 dubolom
 
16.11.21
15:54
Не пробовал Эксель сначала в ТЗ грузить, а оттуда уже - в справочник?
Мне кажется, долго открытый COM-объект Экселя может ресурсы жрать.
2 Дегенератор идей
 
16.11.21
15:58
(1) до замера производительности были у меня такие мысли..
но ресурсов вроде не сильно тратится: 3% ЦП и 450м оперативки, причем память не увеличивается.
3 Эльниньо
 
16.11.21
16:12
Делай по 100 элементов
4 Дегенератор идей
 
16.11.21
16:16
(3) ага.. уже
пока падения скорости обработки не заметно
5 Андрей_Андреич
 
naïve
16.11.21
16:19
(3) В транзакции по 100-500 элементов
6 Дегенератор идей
 
16.11.21
16:22
по 100 элементов в транзакции обрабатывается от 2 до 10 секунд..

гы.. после 11 тысяч скорость упала в 10 раз
7 Дегенератор идей
 
16.11.21
16:28
10000 2
     10100 2
     10200 2
     10300 1
     10400 2
     10500 1
     10600 2
     10700 2
     10800 1
     10900 1
     11000 1
     11100 41
     11200 20
     11300 37
     11400 54
     11500 72
     11600 68
     11700 43
     11800 60
8 Злопчинский
 
16.11.21
17:45
может у тебя где-то транзакция не закрывается вовремя?
9 Злопчинский
 
16.11.21
17:46
основное время жрется чтением из Экселя если поячеечно читается.
Вруби замер производительности и смотри на колов операций и продолжительность. Тогда можно предметно говорить.
10 Дегенератор идей
 
16.11.21
23:03
я тоже думал что эксель..
но по замерам показывает что запись нового элемента в справочник
кста.. никакого ускорения не было при транзакции в 100 элементов. просто я в предыдущие разы уже создал 11 тысяч элементов и обработка их просто обновляла, поэтому запись шла быстрее.
а после 11 тысяч начались новые элементы и скорость упала в 10 раз

(9) в (7) пункте количество отработанных элементов и прошедшее время в секундах

кста.. при транзакции по 500 после 13500 элеменнтов 1с вылетела с ошибкой CODEBASE  ERROR Error -70 Reading File SC84.CDX


ну и время в последней обработке росло по экспоненте.. последние 500 элементов 13к секунд, предыдущие 500 - 5к секунд, предыдущие - 700 секунд..

(9) замер производительности в (0).. в экселе читаю построчно если элемент найден обновляю флаг и реквизит подчиненного справочника,
если не найден то создаю новый элемент  справочника" номенклатура", записываю, создаю новые элементы в подчиненных справочниках "единицы" и "цены" и снова записываю элемент "номенклатура"
из замера видно что если записывать новый элемент занимает очень много времени, а если потом его просто записать, то быстро.. строки замера 212 и 223
11 Дегенератор идей
 
16.11.21
23:06
если не ошибаюсь.. я этой обработкой уже грузил много тысяч элементов, но было это лет 10 назад
и вроде как не было у меня таких проблем.
12 H A D G E H O G s
 
16.11.21
23:21
Семерка уже сырая...
13 Злопчинский
 
16.11.21
23:48
(10) ну если совсем плохо будет - скидывай базу мне, я на своем компе попробую прогнать.
и да, запись жрет достаточно много времени. я на обмене КИС-WMS сначала находил эклмент и тупо создавал новый/записывал. А потм переделал на кучу проверко чтобы понять - надо ли обновление делать существующих. и хотя проверко дохрена - все стало летать нааамного быстрее, секунд 10-15 против минут
14 Злопчинский
 
16.11.21
23:49
а вот ошибка -17 - это нехорошо, не нравится мне это...
15 hogik
 
17.11.21
02:44
(0)
Посмотрите 30 сообщение в теме: https://forum.infostart.ru/forum9/topic36308/
"максимальный приемлемый размер ключа для "движка" "1С 7.7" равен 117 байтам"(с)
16 Bigbro
 
17.11.21
07:25
если база на скуле стоит посмотреть как там фрагментирован лог файл и какими порциями прирастает mdf и ldf
а то бывает там по 1 мб приращение ставят а потом удивляются почему все колом встает на объемных загрузках.
17 Дегенератор идей
 
17.11.21
08:07
(13) спс..
есть тупое решение. тупо разбить загрузку на несколько.

если я правильно понимаю.. у меня при загрузке тупо растёт индексный файл: от 16 метров до 2 гигов при записи новых элементов.

учитывая тот факт, что десять лет назад у меня таких проблем не было на идентичной базе, то пока проблему я вижу из-за двух местах: ОС или длинные реквизиты.
есть возможность проверить и то, и то..
18 ДенисЧ
 
17.11.21
08:08
Если растёт индекс - значит, индексные выражения большие...
Нигде строк длинных проиндексированных нет?
19 Андрей_Андреич
 
naïve
17.11.21
08:13
(18) Наименование всегда индексируется и у номенклатуры всяко не 10 длина наименования
20 ДенисЧ
 
17.11.21
08:14
(19) У других-то не растёт?
21 Bigbro
 
17.11.21
08:16
не заметил про cdx файл.
тогда надо смотреть фрагментацию индексов в первую очередь, размер файлов и количество записей в них.
22 АгентБезопасной Нацио
 
17.11.21
08:32
Если растет индекс, значит, неэффективно перестраивается дерево. Значит, большой разнобой в наименованиях. Значит, сортируй предварительно (в екзеле, или выгрузив предварительно в ТЗ) по наименованию.
ну, или сделать прямые создание и запись. Но для разовой задачи это лениво.
Можно не писать наименования, писать только равное ему "ПолноеНаименование", а после загрузки "снаружи" перезаполнить, и штатно переиндексироваться.
Можно посмотреть, какой именно индекс занимает больше места в файле - но я название той утилиты уже не помню. Можно заголовок cdx разобрать, конечно  - но тоже лениво для разовой задачи.
23 ADirks
 
17.11.21
09:09
(10) sc84 - это номенклатура в ТиС?
там есть такой прикол - индекс на поле НеВключатьВпрайс
при большом количестве вставок у DBF-движка крышу от этого сносит, и выражается как раз в таком вот росте индексного файла.
24 Злопчинский
 
17.11.21
09:19
(23) а почему именно на это поле? у меня аналогичных флажков несколько, "ассортиент", "выгружать наружу"...
25 Злопчинский
 
17.11.21
09:20
(17) много реквизитов с сортировкой и отбором. и часто увеличивают наименование свыше 50 символов
26 ADirks
 
17.11.21
10:33
(24) я так понимаю, что на любое поле с флажком такая реакция. Но нужно чтобы номенклатур были десятки тысяч.
мне один раз попадалась такая база с номенклатурой автозапчастей - для добавления поля в справочник пришлось выключать отбор, а после обновления снова включать.
27 Дегенератор идей
 
17.11.21
10:41
итого..
достал базу из архива. три штуки.
1. уменьшил наименование со 100 до 50
2. изменил обработку. новый элемент решил попробовать сразу записать с пустым наименованием и реквизитами
3. ничего не менял. но запустил на своем компе вместо сервера. только реиндексировал

в базе наименование строка 100, артикул строка 25 сортировка и отбор, НеВключатьВпрайс число 1 сортировка и отбор

1 вариант загрузил 45к позиций в базу менее чем за 9 минут
2 и 3 вариант.. скорее всего до конца не дойдут.
28 Ёпрст
 
17.11.21
10:42
(0)Проще прямым запросом проинсертить табличку.
В снеговике, тоже шляпа с добавлением новых элементов.
Спонадобилось тут 90 мультов создать элементов с 1 реквизитом наименование. Дык вот, штатненько, можно и неделю лепить.
А так, сам скуль справился минут за 10.
29 Ёпрст
 
17.11.21
10:43
И это с учетом выгребания самих наименований с рс, в котором это наименование как реквизит регистра и количеством неуникальных записей 250 мультов.
30 Дегенератор идей
 
17.11.21
10:55
ну это...
если наименование сделать длиной 80, то 45к загружает за те же 9 минут
31 Ёпрст
 
17.11.21
10:56
(30) сыми отборы со всех реквизитов и пробуй.
32 Дегенератор идей
 
17.11.21
11:05
(31) зачем?
в (15) правильный ответ.. если уменьшить длину наименования, то проблема исчезает
33 Дегенератор идей
 
17.11.21
11:21
ещё один вариант решения..
запускаем обработку, после того как она создала 10к новых элементов прекращаем её по esc. реиндексируем базу(ибо индекс будет около 1 гига, после реиндексации 20 метров)
запускаем обработку снова, первые 10к у нас уже созданы и она их быстро перезапишет и начнёт тормозить уже на второй 10К. повторяем процедуру
34 Злопчинский
 
17.11.21
12:12
(26) флажок-то - это обычный числовой реквизит. длина = 1.
есть мысль что если на флажок (допустимые значения 0/1) поставить длина=2 (учитывая ВОЗМОЖНЫЙ ЗНАК (или поиграться с признаком "неотрицательный" - то ситуация станет лучше)
35 Эльниньо
 
30.11.21
13:44
(12) Восьмёрка ещё сырая, семёрка уже перезрела. Как жыдь?
36 ADirks
 
30.11.21
13:57
(35) Можно пилить. Можно трясти. Ещё можно сидеть на берегу реки (говорят, если достаточно долго сидеть, то мимо обязательно проплывёт труп твоего врага).
37 Злопчинский
 
30.11.21
14:59
(36) труп - это EDT..?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn