Некоторые замечания по ускорению работы управляемых форм

Началось все с того, что к нам обратился клиент для проведения аудита производительности. Были жалобы на общую производительность системы, а также были обозначены отдельные конкретные операции, которые выполняются долго. О некоторых этих операциях, и о том, как их удалось ускорить и хочу рассказать.
2,2 тыс. 327

Началось все с того, что к нам обратился клиент для проведения аудита производительности. Были жалобы на общую производительность системы, а также были обозначены отдельные конкретные операции, которые выполняются долго. О некоторых этих операциях, и о том, как их удалось ускорить и хочу рассказать.

Операция 1. Рабочее место менеджера по отгрузке

Есть обработка на управляемых формах, в которой основной элемент – это динамический список.  Данная обработка является критичной для бизнеса, т.к. используется она довольно часто и ее медленная работа влияет на скорость всего бизнес-процесса отгрузки.

Медленно выполняется операция по открытию и обновлению этого динамического списка. Среднее время выполнения этой операции у пользователя с включенным RLS составляло примерно 60 секунд. Данное поведение стабильно воспроизводилось и на копии базы. При работе без RLS скорость увеличивалась до 40 секунд.

Начали делать анализ с замера производительности 1С, однако это не дало никакой информации, т.к. операции по обновлению динамического списка в него не попадают. Тогда стали анализировать с помощью SQL Profiler. Обнаружили, что в этой операции выполняется два долгих запроса, т.к. на данной форме располагаются два динамических списка. Второй динамический список располагался на второй закладке, которая не отображалась при открытии, однако данные тот список получал и при открытии, и при выполнении команды «Обновить» из первого списка.

Также этот второй список получал данные даже дольше первого.

Проанализировав текст запроса, мы увидели, что и для первого, и для второго запроса тексты были громоздкими. В первом запроса было соединено шесть таблиц и вложенные запросы, а во втором использовалось пять таблиц. 
В динамические списки не стоит задавать сложные запросы, т.к. он читает данные курсорным способом (выбирая данные порционно), а на сложных запросах, в которых участвует много таблиц, чтение курсорным способом может не быть выполнена оптимально оптимизатором СУБД. Рекомендация для таких случаев создавать регистр, в который заносить данные для этого динамического списка. Однако мы продолжили дальнейшее исследование.

В тексте второго запроса нашли возможность оптимизации запроса. В тексте использовалось разыменование поля составного типа. Используя конструкцию «ВЫРАЗИТЬ» удалось ускорить операцию открытия списка формы, однако незначительно.

Текст до изменения:

После:

Список до сих пор открывался долго.

В большинстве случаев оператор работали только с первой закладкой, а на вторую даже не переходили, а она отнимала у них время работы.

Мы решили отключить этот список, и включать его только при открытии пользователем этой закладки. Попробовали сначала отключать его с помощью сброса флажка видимость, однако это не помогло. Запрос все равно получал данные, даже не смотря на то, что список был невидим.

Тогда решили заменять текст запроса на «пустышку», и устанавливать его назад, при выборе страницы. Тогда при открытии формы, данные для второго дин.списка не будут получаться до тех пор, пока мы не откроем эту закладку.

В итоге, скорость открытия данной формы возвросла после доработок с 50-60 секунд до 7-10 при проверки открытия пользователем с ограничением по RLS.
Операция 2. Вывод характеристик при подборе товара

Обработка подбора, при выборе номенклатуры, и двойном щелчке на ней, обработка «проваливалась» в выбор остатков по характеристике этой номенклатуры.

Просмотр списка номенклатуры был на приемлемом уровне производительности, однако переход к выбору характеристик мог занимать до 10 секунд. Снятие замеров времени выполнения показало, что среднее время перехода составляет почти 5 секунд, при том что было выполнено почти 5 тысяч операций.

Замер производительности 1С показал, что получаение остатков не занимает много времени, однако при переходе контектса выполнения на сервер уходит бОльшая часть времени выполнения операции.

При анализе кода обработки, мы увидели возможность заменить контекстный вызов функции «ВывестиХарактеристики» на внеконтекстный. Это позволило сократить объем передаваемого трафика между клиентом и сервером и на наших замерах позволило добиться улучшения в два раза, с 5-6 секунд до 2-3.

Операция 3. Динамический список с остатками

Данная операция была определена с помощью сервиска querytj. Она была в топе долгих запросов на первом месте. Вот некоторые данные о самых долгих операциях выполнения данного запроса. Открытие списка доходило до 500 секунд!

Определив по контексту место данного запроса, определили его текст в терминах 1С.

Оказалось, что это довольно-таки простой запрос. Соединение с  виртуальной таблицей остатков не должно было вызывать проблем, т.к. этот запрос должен был соединяться с таблицей текущих остатков. Также по логике работы текущие остатки должны быть незначительными, т.к. заказы должны закрываться, и в остатках должны оставаться только незакрытые строки.

Однако он выполнялся долго. Просматривая текст запроса, мы нашли участок, приводящий к замедлению. Это было как раз обращение к таблице итогов регистра «ЗаказыНаПеремещение».

«Узкое место»

Причиной этого удалось быстро найти. Это были нулевые итоги в этой таблице. Так из 238 тысяч записей текущих итогов, 236 тысяч были нулевыми. Это очень замедляло выполнение данного запроса. Подробнее об этом вопросе рассказано тут.


Для решения этой проблемы нужно было сделать пересчет итогов. Так до пересчета итогов – мы наблюдали долгое открытие списка документов Перемещение товаров, иногда задержка составляла более 60 секунд. Но после пересчета итогов, данный список стал открываться за время менее секунды.

Выводы:

Динамические списки очень удобны для разработчиков, однако не стоит их нагружать слишком сложными запросами. Помните, что они расчитаны на работу с простыми запросами, в которых можно эффективно использовать курсорное чтение (читать данные порциями).

Также, по возможности, используйте внеконтекстные вызовы для форм, особенно, когда эти формы содержать много данных.

Начать дискуссию

Набиуллина: цель Центробанка — защита реальных доходов людей

Жесткая денежно-кредитная политика Центробанка направлена на то, чтобы защитить доходы людей от инфляции, а также обеспечить сбалансированный рост экономики страны.

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора
Реклама

Местные власти станут активнее убирать незаконные рекламные конструкции

Заместитель руководителя ФАС Карина Таукенова на заседании экспертного совета по вопросам законодательства о рекламе заявила, что контролировать демонтаж незаконных рекламных конструкций органы должны местного самоуправления.

По какой ставке ЦБ надо рассчитывать неустойку за несданный вовремя строительный объект

После длительных судебных разбирательств Верховный суд РФ занял сторону ответчика-застройщика, который нарушил срок передачи жилья по ДДУ, из-за неправильно указанной истцом ключевой ставки ЦБ.

Иллюстрация: Вера Ревина/Клерк.ру
Лучшие спикеры, новый каждый день
Бесплатно с Отчетность в СФР

Как легко узнать регистрационный номер страхователя в СФР по ИНН. Мини-курс

Для чего нужен регистрационный номер в СФР и как его узнать, рассказываем в сегодняшнем мини-курсе.

Как легко узнать регистрационный номер страхователя в СФР по ИНН. Мини-курс

Правительство, регионы и инвесторы готовятся к созданию круглогодичных морских курортов России

Заместитель председателя правительства Дмитрий Чернышеко заявил, что «Пять морей и озеро Байкал» — это сейчас самый масштабный туристический проект в новейшей истории России.

46

Как инвестору проводит проверку бизнеса перед заключением договора инвестирования

Инвестиции в бизнес путем предоставления займа — один из способов пополнения оборотных средств для заемщика, приобретение новой линии оборудования или открытие нового филиала в другом регионе без изъятия финансов из оборота.

Опытом делятся эксперты-практики, без воды

Как ИП не слететь с патента и другие хитрости, связанные с патентной системой налогообложения

Как ИП не оказаться на грани лишения преимуществ патентной системы налогообложения. Узнайте из статьи, как соблюдать установленные лимиты и о возможностях сэкономить. А также выясните как оптимально снижать размер платежей по патенту на страховые взносы.

Как ИП не слететь с патента и другие хитрости, связанные с патентной системой налогообложения
5
56

Роскомнадзор дал 3 памятки, как настроить приватность и ограничить сообщения от незнакомцев

При общении в мессенджерах и социальных сетях Роскомнадзор рекомендует проявить особую осторожность, так как их часто используют злоумышленники для вовлечения в противоправные действия: террористическую деятельность и другие серьезные преступления.

Читатели «Клерка» начнут разбираться в автоматизации сквозных бизнес-процессов

Автоматизация для многих бухгалтеров кажется чем-то сложным и непонятным, но компания Северсталь ЦЕС в своем блоге докажет, что цифровые продукты и IT-сервисы существенно облегчают бизнес-процессы.

Читатели «Клерка» начнут разбираться в автоматизации сквозных бизнес-процессов

Можно ли удержать с сотрудников стоимость обучения

Работодатели готовы оплачивать учебу, но встает вопрос и о защите средств. Часто — если сотрудник увольняется преждевременно, с него пытаются возместить стоимость. Законно ли это?

Иллюстрация: Вера Ревина/Клерк.ру

Кадровый аутсорсинг: в чем выгода

Штрафы за неправильное ведение кадрового делопроизводства достигают в некоторых случаях 200–500 тыс. руб., а проверки ГИТ в последнее время происходят все чаще. 

Кадровый аутсорсинг: в чем выгода

Верховный суд: ВТБ будет платить НДС за лицензии Microsoft

Поставщик программного обеспечение выиграл суд с банком ВТБ. После изменения налогового законодательства ему пришлось заплатить НДС по сублицензионному договору. Теперь программный НДС будет возмещать ВТБ.

60
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Часть команды, часть корабля? Как теперь сотрудничать с самозанятыми без штрафов и доначислений в налоговую: 3 совета от юриста

С первого марта вступил в силу новый приказ Минтруда, и он серьезно затронет ваш бизнес, если вы работаете с самозанятыми. Государство решило заняться теми, кто пытается обходить налоги, и ваши отношения с самозанятыми исполнителями будут под особым контролем.

До 1 апреля надо сдать бухотчетность за 2023 год

Организации на всех режимах налогообложения должны сдавать бухгалтерскую отчетность не позднее 3-х месяцев после окончания отчетного года. Крайний срок сдачи за 2023 год – 01.04.2024 включительно.

77
ПСН

🔨 ИП на ПСН должен сам оказывать услуги, а не перезаказывать их у других ИП. Эксперт: достаточно спорная позиция Минфина

Заключение предпринимателем договоров субподряда с другими ИП не вписывается в рамки патента.

149

Кредиты и не только: способы финансирования предпринимателей

В 2023 году количество малых и средних предприятий в России увеличилось на 500 тыс. — до 6,3 млн. Это стало рекордом за всю историю существования реестра МСП.

Кредиты и не только: способы финансирования предпринимателей

ТОП-15 курсов по 1С:Документоборот (делопроизводство) в 2024 году

В этой статье мы собрали платные и бесплатные курсы по 1С:Документообороту.

ТОП-15 курсов по 1С:Документоборот (делопроизводство) в 2024 году
Банки

Клиенты ВТБ будут получать кешбэк в рублях

ВТБ по программе мультибонусов будет начислять кешбэк в реальных рублях. Клиенты могут установить избранные категории товаров для получения повышенных бонусов до 25% с покупок.

69

🏃 Какие выплаты положены работнику при увольнении переводом. Эксперт: допвыплаты на уровне закона были бы странными

Если сотрудник увольняется переводом к другому работодателю, то никаких выходных пособий и компенсаций в ТК за это не предусмотрено.

164

Интересные материалы

Руководители рассказали, почему готовы отказаться от должности. Исследование

Больше трети руководителей в России готовы отказаться от своей должности, чтобы начать строить карьеру в новой профессии.