|
Зависает проведение ОперацииБух с большим количеством движений | ☑ | ||
---|---|---|---|---|
0
МаксимБел
07.01.15
✎
00:21
|
Переносим остатки из 1С77 в 1С82. Остатки пишутся в регистр бухгалтерии документом ОперацияБух. При количестве движений порядка 5000 на документ, операция проводится нереально долго (несколько часов).
Когда грузили обороты, количество движений было еще больше, но они разбивались на множество документов (максимум по несколько сотен движений на документ) - всё было отлично, совокупно проводилось в десятки раз быстрее. С чем это связано и как побороть проблему? |
|||
1
KUBIK
07.01.15
✎
00:23
|
железо менять с 77 надо на 82
|
|||
2
senior
07.01.15
✎
00:24
|
Сделать замер для порядка. А вообще посмотреть скл профайлером план запроса при записи движений.
|
|||
3
МаксимБел
07.01.15
✎
00:29
|
(1)(2) Не то.
Вот вроде бы нашел варианты: http://www.trsoft.ru/articles/11/ |
|||
4
senior
07.01.15
✎
00:31
|
Статистику пробовали обновлять?
|
|||
5
senior
07.01.15
✎
00:33
|
Кстати отключение итогов иногда используют, но надо помнить что при их включении после операции уйдет время на их пересчет
|
|||
6
KUBIK
07.01.15
✎
00:35
|
"Что грузите?"
©Кавказская пленница |
|||
7
МаксимБел
07.01.15
✎
00:41
|
(4) Каким образом?
|
|||
8
Изучаю1С8
07.01.15
✎
00:43
|
(7) У вас скуль или файловая?
|
|||
9
МаксимБел
07.01.15
✎
00:44
|
(8) Скуль
|
|||
10
Изучаю1С8
07.01.15
✎
00:47
|
(9) http://osergey.ru/ru/tag/sql/
раздел по обновлению статистики только я думаю что это сильно не поможет. |
|||
11
Изучаю1С8
07.01.15
✎
00:48
|
Самое правильное я думаю разбить на разные операции.
|
|||
12
МаксимБел
07.01.15
✎
00:52
|
(11) Обработку загрузки придется переписывать. Это долго, а остатки нужны вчера.
|
|||
13
Изучаю1С8
07.01.15
✎
00:53
|
(12) Отключи проведение операции, просто чтобы она записалась. А потом разбей на разные документы внешней обработкой.
|
|||
14
senior
07.01.15
✎
01:01
|
(10) не утверждаю, что здесь в этом проблема, но у нас периодически вылазила проблема, которая заключалась в том что документ который снимался с проведения 3 мин, иногда снимался по минут 40. И проблема была в некорректном плане запроса, что решилось обновлением статистики. В любом случае профайлер покажет в чем тормоза, даже если это из-за обновления итогов.
|
|||
15
SleepyHead
гуру
07.01.15
✎
08:05
|
Перед тем, как записать документ, попробуй так -
Док.ОбменДанными.Загрузка = Истина; (Док - это объект типа ДокументОбъект.ОперацияБух). У тебя в этом случае при записи документов не будут выполняться проверки, смотри модуль объекта, обработчик события ПередЗаписью() Если для записи движений пользуешься набором регистров накопления с отбором по регистратору, то же самое сделай для набора в регистре накопления. |
|||
16
unregistered
07.01.15
✎
10:34
|
(13) >> Отключи проведение операции
У документа ОперацияБух запрещено проведение. Он в принципе не проводится. (15) >> Док.ОбменДанными.Загрузка = Истина; >>...при записи документов не будут выполняться проверки Круто конечно. Но только в обработке ПередЗаписью этого документа не делается ничего такого, что могло бы вызвать проблемы (0). (12) >> Обработку загрузки придется переписывать. +100 Увы, но это единственно верное решение. Попыткой решения малой кровью было бы установка монопольного режима перед выполнением загрузки. Если конкретно данная проблема связана с тем, что описано по ссылке в (3), то это самый простой вариант. Среди прочих остаётся только вариант - разбивать документы загрузки на порции с меньшим количество записей. |
|||
17
SleepyHead
гуру
07.01.15
✎
10:41
|
(16) "Круто конечно. Но только в обработке ПередЗаписью этого документа не делается ничего такого, что могло бы вызвать проблемы (0). "
То есть, перебор всех регистров и наборов записей, и каждого движения в них вы проблемой не считаете? А также повторный перебор и установку признака активность? // Заполнение реквизитов регистров Период и Организация Для каждого НаборЗаписей Из Движения Цикл Если НаборЗаписей.Количество() = 0 Тогда Продолжить; КонецЕсли; ПустаяТаблица = НаборЗаписей.ВыгрузитьКолонки(); ЕстьОрганизация = ПустаяТаблица.Колонки.Найти("Организация") <> Неопределено; ЕстьПериод = ПустаяТаблица.Колонки.Найти("Период") <> Неопределено; Если НЕ (ЕстьОрганизация ИЛИ ЕстьПериод) Тогда Продолжить; КонецЕсли; ТаблицаДвижений = НаборЗаписей.Выгрузить(); Если ЕстьОрганизация Тогда ТаблицаДвижений.ЗаполнитьЗначения(Организация, "Организация"); КонецЕсли; Если ЕстьПериод Тогда ТаблицаДвижений.ЗаполнитьЗначения(Дата, "Период"); КонецЕсли; НаборЗаписей.Загрузить(ТаблицаДвижений); // Актуализируем списки регистров ИмяРегистра = НаборЗаписей.Метаданные().Имя; Если Метаданные.РегистрыНакопления.Содержит(НаборЗаписей.Метаданные()) Тогда ДобавитьРегистрНакопления(ИмяРегистра); ИначеЕсли Метаданные.РегистрыСведений.Содержит(НаборЗаписей.Метаданные()) Тогда ДобавитьРегистрСведений(ИмяРегистра); КонецЕсли; КонецЦикла; СинхронизироватьАктивностьДвиженийСПометкойУдаления(); |
|||
18
hhhh
07.01.15
✎
10:54
|
(16) а вы точно-точно все 50 обработок ПередЗаписью просмотрели? Во всех общих модулях? Как то вы слишком быстро проверили.
|
|||
19
unregistered
07.01.15
✎
11:02
|
(17) >> перебор всех регистров и наборов записей,
Я так понял, что в (0) речь идёт об одном(!) наборе записей - по регистру бухгалтерии. >> ... и каждого движения в них ... 5000 записей в таблице значений выгруженной из набора и обратно загруженной в набор вы всерьез считаете неподъёмным проблемой?... Вам самому то не смешно? Я не спорю с тем, что это ненужные лишние действия и флаг Загрузка=ИСТИНА вполне можно установить. Только проблема явно не в этом. Для набора в 5000 записей все эти действия занимают время измеряемое в минутах, но никак не в часах. |
|||
20
unregistered
07.01.15
✎
11:04
|
(18) >> вы точно-точно все 50 обработок ПередЗаписью просмотрели?
Конечно нет. Можете воспользоваться для этого отладчиком и посмотреть что конкретно выполняется ПередЗаписью документа ОперацияБух. Если у автора ветки конфа не допиленная (в этой части), то ничего криминального, что могло бы создать проблему (0), там не происходит. |
|||
21
SleepyHead
гуру
07.01.15
✎
11:12
|
Я начинаю подозревать, он после добавления каждой записи весь набор записывает :)
Насчет минут согласен с оратором (19) |
|||
22
SleepyHead
гуру
07.01.15
✎
11:13
|
(19) Мне как раз смешно, а вот автору явно нет. Отладчик в помощь, согласен.
|
|||
23
МаксимБел
07.01.15
✎
11:36
|
(22) (20) Вчера в 21:00 запустил загрузку. Совокупно грузится около 9000 движений. Они разбиты на 3-4 файла. Проведение документов продолжается до сих пор (11:30 следующего дня). Проводится последний документ.
Если проверять через отладчик, снова потеряем кучу времени. Еще такой момент (может как-то связано) - проблема появилась после начала нового года. |
|||
24
hhhh
07.01.15
✎
11:38
|
(20) неправда. Например самое простое, включен обмен на несколько узлов. Тогда ПередЗаписью 5000 операций может выполняться сутками.
|
|||
25
SleepyHead
гуру
07.01.15
✎
11:44
|
Про обмен я не подумал... Позор на мою седую голову.
|
|||
26
unregistered
07.01.15
✎
11:50
|
(24) >> Тогда ПередЗаписью 5000 операций может выполняться сутками.
С чего бы вдруг?... Операция весьма накладная (по времени) не спорю. Но "сутками".... сомнительно. |
|||
27
SleepyHead
гуру
07.01.15
✎
11:52
|
Читата из СП:
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) ОбменДанными (DataExchange) Использование: Только чтение. Описание: Тип: ПараметрыОбменаДанными. Используется для управления обменом данных. С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации. --------- Таким образом, все-таки надо выставлять свойство Загрузка в Истину, а также очищать получателей: ДокОбъект.ОбменДанными.Загрузка = Истина; ДокОбъект.ОбменДанными.Получатели.Очистить(); Есть еще свойство "Отправитель", ему нужно присвоить значение узла, соответствующего ИБ, чтобы регистрация для обмена не выполнялась. но это все при условии, что обмен таки настроен. |
|||
28
МаксимБел
07.01.15
✎
11:56
|
(24) (27) Проведение идет без обмена данными.
|
|||
29
SleepyHead
гуру
07.01.15
✎
11:57
|
(28) Набор один раз записываешь?
|
|||
30
unregistered
07.01.15
✎
12:03
|
(23) >> проблема появилась после начала нового года
может с нового года что-то сделали в базе данных, что могло повлиять? - настроили планы обмена, которых раньше не было - включили версионирование объектов - включили ограничение прав на уровне записей - рассчитали итоги по регистрам, которые раньше не использовались или были отключены. Проверьте самочувствие серверов 1С и СУБД. посмотрите что там происходит. Может у вас размер базы разбух до неприличного (при интенсивные операциях записи/удаления данных такое бывает - надо шринковать). Может память закончилась. В конце концов может быть что-то случилось с железом - проблемы со свободным местом на дисках, проблемы с дисковыми массивами RAID. Наблюдается ли проблема только в этой базе данные или еще и в других (если другие существуют). Наблюдается ли проблема с другими документами (аналогичными или похожими по объему). |
|||
31
МаксимБел
07.01.15
✎
12:25
|
(30) С железом и размером базы всё хорошо. База пустая, только справочники перенесли. До нового года остатки в нее грузились быстро, но там было мало движений.
Остальное проверю. |
|||
32
МаксимБел
07.01.15
✎
12:27
|
(29) Сам по себе набор не записываю. Создаю документ Операция бух, помещаю в него движения и записываю документ в режиме Запись.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |