Ошибка производительности при проведении этапа 2.2 в ERP 2.4 и ERP 2.5
Хочется поделиться одним подводным камнем, с которым могут встретиться другие пользователи ERP. Искал решение в интернете, но ничего похожего не нашел. Поэтому решил создать эту тему.
- Описание
- Подробнее
Описание
Некоторое время назад пользователи стали встречаться с ошибками ожидания блокировки при проведении этапов производства. С помощью технологического журнала выяснили, что виновником блокировки является проведение этапа в фоновом задании "Обработка очереди <Задания к обработке этапов производства>". Поскольку проведение объемных этапов делалось в фоне (инициировано проведением документа "Производственная операция"), проблему с производительностью заметили не сразу. На первом скриншоте видно, что время выполнения задания (по сути все время занимает проведение этапа) неприемлемо долгое.
Анализ показал, что время проведения зависит от количества строк в табличных частях документа. Причем увеличивается крайне нелинейно. Виновником является запрос в процедуре "ПроверитьРеквизитыШапки" модуля менеджера Этапа производства2_2. На втором скриншоте показаны 4 замера. При количестве строк в ТЧ "Расход" в 4-5 тысяч строк практически все время занимает выполнение запроса (4-5 часов).
Главным виновником найден пакет запроса "ВТКоличествоСтрокВТЧ" (результаты на третьем скриншоте). Этот пакет формируется отдельной функцией "ТекстЗапросаКоличествоСтрокВТЧДляПроверкиЗаполнения". Она переписана и вынесена в расширение.
В результате проведение этапа в 6000 строк в ТЧ "Расход" выполнялось около 40 секунд (бОльшую часть занимают другие объемные процедуры).
В тексте представлен альтернативный вариант процедуры "ТекстЗапросаКоличествоСтрокВТЧДляПроверкиЗаполнения". Соединения таблиц заменил на объединение.