Ускоряем 1С:Документооборот КОРП 2.1

16.07.24

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

Хотя документооборот не является классической системой регламентированного учета, но скорость его работы тоже важна. Учитывая, что им пользуются руководители высшего звена и их помощники, которые крайне трепетно относятся к простоям и "тормозам". Данное расширение ускоряет работу основных операций документооборота. Как-то расчет прав, сохранение внутренних, входящих, исходящих документов. В зависимости от количества пользователей и объектов в базе ускорение может быть с "нескольких минут до секунд". А пересчет прав при делегировании у меня сократился с 51 000 сек до менее 10.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Ускоряем 1С Документооборот КОРП 2
.cfe 279,56Kb ver:2024.07.17
47
47 Скачать (1 SM) Купить за 1 850 руб.

У Документооборота всегда были неважные параметры по производительности, когда в нем работает более 100 сотрудников.

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

При анализе ситуации с ДО 2.1 было выявлено несколько групп "тормозов":

1. Долгая запись документа ДО (входящий, исходящий, внутренний). Причина аналогичная у всех трех объектов. Перед записью проверяет изменились ли права и надо ли перезаписывать. Проверка идет кодом 1С - два цикла. Добавлено, удалено. При небольших объемах прав на объект это "летает". Но при значительных (тысячи и более) запись документа уже может идти минутами. Замена на SQL запрос позволило ускорить процесс до секунд, практически зависимо от количества прав на объект.

2 Пересчет прав. Общий модуль. Тут ситуация сложнее  Идет не быстро. Добавление индексов в типовой запрос ситуацию улучшили, но!

2.1. Несколько раз в неделю "зависает" пересчет прав на полдня. Так как мешает работе пользователей -процесс снимали или пересчет прав останавливали, но это не выход.

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

На помощь пришел инструмент мониторинга - 1smonitor. Дождались, когда дойдет до конца, монитор показал весь путь к проблемному вызову, ситуация стала яснее.

Причина - пересчет в режиме "делегирование" - когда пересчитывается огромная таблица всех прав по делегированию. 

Типовой запрос - два вложенных соединения, при чем как всегда связи "перекрестные" - то есть,

1 - связь первой таблицы со второй, по полям первой и второй таблицы 

2 - связь третьей таблицы по полю первой + поле из второй

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

Так как все три таблицы содержат по  десяткам миллионов строк данных - запрос в итоге строился 51 000 сек.

Хорошо подумав, нашел решение, как этот типовой механизм динамического построения запросов переделать.

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

И потом уже "вязал" временную таблицу с третьей.

В итоге время построения запроса сократилось с 51000 сек до 10 сек.

Плюс так как этот же запрос вызывался при открытии файлов - тоже получилось ускорение. 

Ускорение сделано в виде расширения, изменения "обернуты" в "ИзменениеИКонтроль" -поэтому в худшем случае не применяется и ничего не сломают при обновлении релиза.

Подходит под последнюю версию типового ДО 2.1.

Естественно, при применении проверяйте, что нет конфликтов и ошибок применений.

 

08.07.2024

Добавлено ускорение в фоновое задание "Эскалация задач" - переделан запрос. На наших 21 000 000 задач было порядка 300 сек, стало 6

 

16.07.2024

Улучшено ускорение в фоновое задание "Эскалация задач" - переделан запрос. На наших 21 000 000 задач было порядка 300 сек, итого стало 0.07 сек

Проверено на следующих конфигурациях и релизах:

  • Документооборот КОРП, релизы 2.1.34.1

Документооборот тормоза ускорение

См. также

HighLoad оптимизация Программист Платформа 1С v8.3 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    1953    ivanov660    17    

44

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

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    6308    ivanov660    12    

56

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    10900    Evg-Lylyk    61    

45

HighLoad оптимизация Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5766    spyke    28    

51

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    8605    vasilev2015    20    

43

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    14038    276    ZAOSTG    87    

118
Отзывы
6. Viktor_Ermakov 372 02.07.24 08:14 Сейчас в теме
самое главное написать ребятам разработчикам ДО (Безбородову Александру) что бы эти узкие места в типовом решении исправили!
mefalcon; Tantor; mart-sha; ilyav; Дмитрий74Чел; user594342_kosushko; +6 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. titanium2008 47 01.07.24 16:05 Сейчас в теме
Спасибо за проделанную работу, а форму- Задачи мне не оптимизировали случаем?) У нас она что то тормозить стала
2. ZAOSTG 172 01.07.24 16:23 Сейчас в теме
(1)Оптимизировал много -просто решил часть в расширение и в общий доступ на пользу обществу.
Сейчас гляну что по задаче мне оптимизировал - там помоемому больше кода - много раз получало язык и чето-еще -вынес в повторно используемый модуль и "полетело".
Вечером гляну.
я бы посоветовал мою другую обработку " в пару" - анализ SQL глазами 1с-ника
там много интересного накопал пока писал -и постарался сделать ее максимально простой в понимании
3. titanium2008 47 01.07.24 16:37 Сейчас в теме
Спасибо, если получится - выложите тоже . А то Задачи мне очень больная тема для нас))
7. ZAOSTG 172 03.07.24 09:45 Сейчас в теме
(3)Явно не нашел чтобы в этой форме что-то менял - видимо или оптимизировал общие запросы, или переделывал индексы чтобы скуль не ошибался
Совет -поставить 1smonitor как качественный сбор и анализ
и как минимум мою обработку анализа скуля - сразу покажет что не так со скулем, если тек запросы идут что с ними не так и тп
4. Serg O. 297 01.07.24 16:58 Сейчас в теме
а на более ранней версии ДО 2.1.32.6 будет работать ?
или надо до 2.1.34.1 обязательно обновляться ?
5. ZAOSTG 172 01.07.24 17:36 Сейчас в теме
(4) могу попробовать там запустить - но 99% что будет. думаю там этот кусок не менялся давно
6. Viktor_Ermakov 372 02.07.24 08:14 Сейчас в теме
самое главное написать ребятам разработчикам ДО (Безбородову Александру) что бы эти узкие места в типовом решении исправили!
mefalcon; Tantor; mart-sha; ilyav; Дмитрий74Чел; user594342_kosushko; +6 Ответить
8. titanium2008 47 03.07.24 21:05 Сейчас в теме
(6) они уже все в ДО 3.0 . Думаю 2.1 теперь по остаточному принципу)
9. titanium2008 47 03.07.24 21:05 Сейчас в теме
Оставьте свое сообщение