Решение проблемы быстродействия в ERP на рабочем примере

06.04.24

База данных - HighLoad оптимизация

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Мониторинг производительности (Анализ технологического журнала) 2.0.9.11
.cf 1 023,49Kb
374
374
3 SM
Скачать Купить за 2 450 руб.

Постановка задачи

Проблема: выполнение операции занимает значительное время под пользователями с ограничениями.

Задача: оптимизировать проблемный участок с минимальными переделками и доработками.

Исходные данные: ERP ~700 онлайн одновременно. Подсистема производство. Точка входа: кнопка «Диспетчирование (ББВ)» в подсистеме производство.

Диспетчирование (ББВ)

Пару слов про работу этой кнопки с технической стороны: По нажатию на эту кнопку на сервере запускается фоновое задание, результат которого ожидается на форме клиента. Фактически ЕРП не висит (выполняется асинхронно), но пользователь ждет результатов выполнения, чтобы приступить к работе.

Замечание: Мы же знаем, что время = деньги! А также что время ожидания еще коррелирует с точкой закипания пользователя ;)

Последовательность решения

Начальный этап.

Определяемся с точкой анализа и определяем порядок действий для выполнения замера.

Замечание: Согласитесь - плохой тон включать ТЖ на все и для всех.

I) Замер с таймером. 

А) Замер с таймером на рабочей базе.

Предварительный анализ показал, что под пользователем с полными правами выполняется в диапазоне от 5-15 сек. Под пользователем с ограничениями выполняется от 50-70 сек.

Б) Замер с таймером на локальной копии.

Под полными правами 3-8 сек. Под пользователем с ограничениями 4-10 сек.

Выводы: проявляется под нагрузкой.

II) Включаем замер технологического журнала (ТЖ).

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

<eq property="p:processName" value="ERP"/> 
<eq property="usr" value="Пользователь"/> 
<property name="sessionid" value="1234"/>

А) Замеры на рабочей показали следующую картину см. таблица 1. Под полными и правами пользователей с ограничениями.

Б) Делаем замер на копии. Под полными и не полными.

Получаем фактически «квадрат» из таблиц, показывающих как ведет себя система под нагрузкой и без, при учете РЛС и без.

Для выполнения анализа воспользуемся конфигурацией «анализ технологического журнала» ссылки в конце статьи.

Замечание: Мы считаем, что анализ журнала должен быть простым и наглядным, а мериться длиной глубиной знаний в разборе текста на perl или regexp не стоит, можно заняться и более приятным делом, пока необходимый инструмент работает. К примеру, выпить чаю с печенькой)

Табл. 1 Замеры пользователя с ограничениями RLS на нагруженной базе

Табл. 2 Замеры пользователя администратора на нагруженной базе

III) Анализируем, выполняем поиск проблемных участков  

Берем и открываем расшифровку Context для длительной операции согласно рисунку "Табл.1" и смотрим его расшифровку:

 

Технически проблемная часть находится в модуле «ОперативныйУчетПроизводстваВызовСервера» -> функция «ДанныеДляФормированияМаршрутныхЛистов». 

Проблемной частью в нашем случае является выполнение запроса под RLS.  Архитектурные изменения не рассматриваем (минимум изменений), думаем как оптимизировать.

Запрос и представление функции выглядит так.

 

IV) Вырабатываем решение.

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

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

  • Накладываем фильтр простыми отборами соответствующими RLS. В качестве примера возьмем реализацию АРМ "Отгрузки" типовой конфигурации. На пользователя наложен RLS по складам на справочник Склады, т.е. он может выбрать только те склады к которым у него есть доступ. Поэтому накладывать ограничения на запросы позволяющие получить таблицу распоряжений не имеет смысла и можно получать результат в привилегированном режиме.
     
  • Накладываем фильтр набором разрешенных данных. Если в запросе с разрешенными можно выделить некоторую изначальную выборку данных, в рамках которой в дальнейшем определяется итоговый результат, то эти данные выберем сначала (используя разрешенные), а на последующий пакет запросов искусственно накладываем фильтр из этого набора (используем внутреннее соединение с временной таблицей, оператор "В"). Т.е. иногда можно разбить запрос с разрешенными на две части - под ограничениями и без (в привилегированном режиме). 

В данном случае было предложено использовать разбиение запроса и реализовать следующим образом:

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

2. оставшийся типовой запрос выполнить в привилегированном режиме, но с дополнительной фильтрацией по данным временной таблицы из первого запроса.

На что еще необходимо обратить внимание (Вы это скорее всего прекрасно знаете):

а). Выносить во временные таблицы стоит только фильтрованные данные. Плохим примером было бы вынести вместо таблицы остатков, таблицу документов, а потом ее отфильтровать.

б). Стараться всегда, где можно использовать фильтры и отборы.

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

г). Условия в виртуальных таблицах.

д). "Или" переделывать на объединения (вопрос к знатокам, приходилось ли разбивать на десятки объединений условия по ИЛИ)?

Код запроса и представление функции с изменениями:

 

Замеры после оптимизации показали следующие результаты: 
 - Время для полноправного пользователя стало в районе 3-10 сек ,
 - Пользователь с ограничениями стал работать в интервале 10-15 сек.

На рисунке ниже приведена таблица с замерами, выполненными после оптимизации (все замеры проводились при одинаковых настройках).

Табл. 3 Замеры пользователя с ограничениями RLS после оптимизации

Послесловие ... 

Проект для анализа технологического журнала расположен на GitHub по адресу: https://github.com/Polyplastic/1c-parsing-tech-log 

Скажу сразу - другие готовые инструменты для решения подобных проблем нам не подошли в связи с поставленными перед нами целями и задачами.

Замечание: Для тех, кто не хочет ставить EDT и компилировать, но хочет посмотреть – есть возможность скачать с infostart ссылка внизу.
В общем включайтесь в разработку на EDT и Open Source, и да прибудет с нами сила.

(Об особенностях процесса разработки на EDT я рассказывал тут: Взгляд на практику разработки в EDT из зазеркалья )


нагрузочное тестирование ERP оптимизация быстродействие Тестирование 3.0

См. также

HighLoad оптимизация Системный администратор Программист Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    12061    ivanov660    6    

80

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    6501    a.doroshkevich    22    

74

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    18325    skovpin_sa    14    

104

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Кто не любит убирать мусор? Думаю, практически все, а вот в Postgres это обязательный ритуал для эффективной работы. Как эффективно настроить уборку за 1С в Postgres, можно прочитать в этой статье и еще раз задуматься о бесплатности Postgres.

05.08.2023    5900    1CUnlimited    5    

52

Запросы HighLoad оптимизация Программист Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    23638    Филин    37    

118
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. e][tend 18.12.18 10:10 Сейчас в теме
За конфигурацию по разбору логов ТЖ спасибо!
ivanov660; shard; +2 Ответить
2. ivanov660 4561 18.12.18 10:20 Сейчас в теме
(1)
1. Спасибо всем нам) Буду рад если пригодится в работе. По вопросам и замечаниям, если будут пишите в секцию issue на GitHub проекта.
2. В ближайшем будущем мы планируем добавить еще некоторое количество полезного функционала.
3. Сейчас данная конфигурация у нас успешно работает в облаке для мониторинга проблемных ситуаций.
3. mpeg1989 131 18.12.18 11:47 Сейчас в теме
ИЛИ будет отрабатывать медленно, если отбор накладывается на разные поля. Пример:
Контрагент = &Контрагент ИЛИ Номенклатура = &Номенклатура.
Конструкция Контрагент = &Контрагент1 ИЛИ Контрагент = &Контрагент2 будет работать быстро.

Вложенные запросы сами по себе не страшны, плохо СОЕДИНЕНИЕ с вложенным запросом.

Соединение с виртуальной таблицей на уровне СУБД превращается в двойное соединение со вложенным запросом.

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

А в целом да - РЛС убирать, и отборы, отборы и еще раз отборы!
Dimkasan; tulakin_s; ProgrammistC; A_Max; +4 Ответить
4. ivanov660 4561 18.12.18 12:08 Сейчас в теме
(3) На счет индексирования. Недавно столкнулись с плавающим багом.

Относительно простой запрос по выборке выполнялся практически всегда быстро, но очень редко чертовски медленно - разница оказывалась порядка 100 раз. Смотрели сервер, потом планы запросов и выяснили, что их два: один хороший и оптимальный, а второй дурной со сканом. Так вот проблема была в том, что скуль иногда ошибался. Проблема решилась индексированием маленькой (в большинстве 40-50 записей) временной таблицы.
Поэтому в большинстве случаев настройки решение зависит от конкретной ситуации и окружения для рассматриваемой системы.
12. Silenser 612 26.12.19 09:02 Сейчас в теме
(4)

Относительно простой запрос по выборке выполнялся практически всегда быстро, но очень редко чертовски медленно - разница оказывала
Такое поведение больше похоже на кривую статистику, обновление которой происходит при реиндексации. В следующий раз, попробуйте обновить статистику индексов с фулсканом, возможно, поможет.
13. ivanov660 4561 26.12.19 09:49 Сейчас в теме
(12)Да, проблемы были связаны со статистикой, а также своеобразным взаимодействием версии 1с и SQL. Перестройка статистики в этом случае не помогла.
8. ProgrammistC 60 18.04.19 13:31 Сейчас в теме
(3)
таблицу.
абсолютно согласен с комментарием
5. Darklight 32 19.12.18 17:09 Сейчас в теме
Проект на git-hub не содержит значимых файлов сорсов (одни md). Или я что-то не понимаю.

А вот статья получилась очень познавательная, более менее хорошо написанная! Побольше бы таких статей! Так держать!
6. ivanov660 4561 20.12.18 07:08 Сейчас в теме
(5)это проект EDT и все необходимые файлы на месте.
Чтобы запустить вам нужен EDT и 1С.
Далее в хелпе нужно найти статью как подключиться к git и развернуть проект.
7. Darklight 32 20.12.18 14:29 Сейчас в теме
(6)Это всё понятно. Я извиняюсь, всё нашёл - просто криво в начале посмотрел
9. Alv_prog 11.12.19 17:33 Сейчас в теме
10. bugagashenka 203 23.12.19 06:04 Сейчас в теме
Не подскажете, чем в конфигурации парсите? Я так понимаю, скриптом?
11. ivanov660 4561 23.12.19 08:26 Сейчас в теме
14. mdie 86 04.02.20 17:28 Сейчас в теме
На просторах github'а, а также и на infostart'е встречалась утилита на Java для парсинга ТЖ. Подозреваю будет много лучше, чем RegExp из VB через COM
15. ivanov660 4561 04.02.20 17:39 Сейчас в теме
(14)
1. На мой взгляд, намного лучше будет, если 1С ники все же сделают нормальный структурированный вывод информации технологического журнала и не придется использовать все эти регулярные выражения.
2. Мы же преследовали цель все в одном флаконе на 1С для задач анализа быстродействия.
18. user925256 23.10.20 08:52 Сейчас в теме
(15)помогите скачать конфигурацию
19. ivanov660 4561 23.10.20 09:29 Сейчас в теме
(18) А в чем собственно проблема? У вас есть два варианта скачать тут (некоторым образом "поддержать" проект) или на GitHub.
20. user925256 23.10.20 10:34 Сейчас в теме
(18) проблемо с том что после скачивание цф или дт файла нет
22. ivanov660 4561 23.10.20 11:53 Сейчас в теме
(20)
1. Включаю телепата. При скачивании с GiutHub проекта, там нет cf (файла конфигурации). Да это действительно так, Вам надо установить EDT и скомпилировать проект.
2. Я уже писал выше. Повторю если вы хотите скачать cf, то воспользуйтесь infostart (файл в приложении и стоит 3 SM) или GitHub (доступны публикуемые релизы тут бесплатно). Красная или синяя таблетка, вот в чем вопрос)
16. mult1c 15.06.20 11:43 Сейчас в теме
Добрый день. В скачанном .cf нет отчетов\АРМ для просмотра - график PM.
17. ivanov660 4561 15.06.20 14:56 Сейчас в теме
(16) это отдельные обработки ищите на сайте проекта https://github.com/Polyplastic/1c-parsing-tech-log, вот тут master/parsing-tech-log-plugins/bin
21. user925256 23.10.20 11:52 Сейчас в теме
половина этих обработок видает ошибку а есть у вас уже гатовая база как в видео можте дать силку на базу, или мне самой надо исправить обработки под себя?
23. ivanov660 4561 23.10.20 11:57 Сейчас в теме
(21)
1. Готовой базы нет. Это не имеет смысла, т.к. окружение у всех свое. И демо базу также делать не вижу смысла.
2. Во-всех видео уроках и статьях я довольно подробно и качественно описал процесс настройки. Смотрите мои статьи на ресурсе infostart, качайте руководство https://infostart.ru/public/1156851/ и сборник всего сразу со ссылками на гитхаб https://github.com/Polyplastic/1c-parsing-tech-log/wiki
24. user925256 23.10.20 12:03 Сейчас в теме
ладно я разберус и попрашу сваих программистов подцепить все обработки в одну базу по моему так будет намного легко и просто и нагладно
25. ryzn 41 05.09.23 08:20 Сейчас в теме
Спасибо!!! Читалка есть, остальное сами...
26. a-grinyuk 06.04.24 18:05 Сейчас в теме
27. ivanov660 4561 06.04.24 22:35 Сейчас в теме
28. a-grinyuk 10.04.24 09:54 Сейчас в теме
(27)
А можно обработки и отчёты получить ? На github вижу, но как их сконвертировать без EDT не знаю. Без них конфигурация имеет мало смысла как я понял.
29. ivanov660 4561 10.04.24 14:59 Сейчас в теме
(28)
1. посмотрите на вкладке релизы (https://github.com/Polyplastic/1c-parsing-tech-log/releases)
или тут https://github.com/Polyplastic/1c-parsing-tech-log/tree/master/parsing-tech-log-plugins/bin
2. без них используется функционал работы с технологическим журналом, т.е. в некоторых случаях этого может быть достаточно
30. adamst 3 22.08.24 11:33 Сейчас в теме
ну просто вынуждают работать на EDT :)
Оставьте свое сообщение