|   |   | 
| 
 | 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..?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |