Повод для исследования — заметное снижение быстродействия при переводе учета с УТ 11.1 на 11.4 по «нашим», не стандартным метаданным (регламенты работы с массовым заполнением/проведением документов/регистров).
В первом приближении, одна из причин обнаружилась в «лишней работе» подписок БСП.
Для исследования проблемы была создана простая тестовая подсистема. (1 — справочник, 1 — документ, 1 — регистр сведений, 1 — регистр накопления). Подсистему добавил в демо базу «Управление торговлей».
Сравниваем результаты по операциям с «нашими» метаданными в «обычной» файловой демобазе «Управление торговлей» и базе, где часть подписок БСП отключена расширением по обрабатываемым типам.
Результаты тестов.
|
Операция 5000 итераций |
Управление торговлей демо принимаем за 100% (эталон) (мс) |
Управление торговлей демо с отключенными подписками БСП для тестовой подсистемы
(мс) |
% от эталона
меньше 100% — быстрее |
1 |
Справочник создание/заполнение |
19873
|
18593
|
93,5 |
2 |
Справочник изменение |
13605
|
11195
|
82,2 |
3 |
Справочник удаление |
265465
|
176958 |
66,5 |
4 |
Регистр заполнение |
11011
|
9817
|
89,1 |
5 |
Регистр изменение |
12088
|
11028 |
91 |
6 |
Регистр удаление |
1 |
1 |
100 |
7 |
Документ создание/заполнение/проведение |
44057
|
38204
|
86,7 |
8 |
Документ изменение/проведение |
38938
|
33628
|
86,3 |
9 |
Документ удаление |
367001
|
214913
|
58,5 |
Конечная цель. Если по ДОБАВЛЕННЫМ метаданным, не используется БСП, лишний функционал должна быть отключен. В подсистеме, по "добавленным" метаданным нужно выполнение только нашей бизнес логики.
«Исправляем» БСП.
Написано расширение, отключающее подписки БСП для списка заданных типов. (Естественно, НЕ меняющее поведение системы для стандартных типов)
Расширение анализирует обращение к подпискам. Если тип описан как исключение — подписка/обработчик НЕ выполняется.
Список обрабатываемых/не обрабатываемых типов задается в модуле расширения.
Отключаем не используемую функциональность (для тестовой подсистемы):
— миграция элементов между узлами РИБ
— автономные рабочие места
— метаданные НЕ стандартные и в процедурах обновления не участвуют
— работа в модели сервиса
— уведомления/задач пользователя
— нет доп.реквизитов
— нет интеграции с документооборотом
— и т.д…. по функционалу БСП
Выводы:
При отключении «лишних» подписок БСП имеем увеличение быстродействия базы 9-35% в зависимости от вида операции.(для добавленных метаданных)
Больше всего интересовал процесс изменения/проведения документов. При изменении/проведении документа по 1 регистру накопления, при отключенных функциях БСП имеем ~ +9-15% производительности.
Результаты весьма относительны и зависят от конкретных метаданных. Думал отключение БСП даст больший профит. Видимо есть еще зависимость от размера конфигурации / версии платформы.
В серверной среде все сложнее… но порядок цифр по тестам в рабочей базе примерно тот-же;
В «рабочей» базе, можно поступить проще — часть функций просто «отключить» расширением.
Пример отключаемых функций (Полный список в расширении … конечно, мы знаем/понимаем что и зачем это мы делаем 🙂 :
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхНаборЗаписей
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхДокумент
ОбменДаннымиПолныйПередЗаписьюРегистра
ОбменДаннымиСОтборамиПередЗаписьюРегистра
ОбменДаннымиОбменУправлениеТорговлейРозницаПередЗаписьюРегистра
ОбновлениеВерсииИБПередУдалениемСсылочногоОбъекта
и т.д.
Оставшиеся вопросы к 1С 🙂 :
Предполагаю, что оптимизация — не сильная сторона разработчиков типовых конфигураций 1С 🙂 … но:
- Почему отключение доп.функциональности для некоторых/ «своих» типов метаданных на стандартной конфигурации нельзя выполнить, не снимая конфигурацию с поддержки, не используя расширения?
- Почему 1С не отключают подписки на «удаленные» объекты, которые не используются ?
Пример:
РегистрСведенийНаборЗаписей.УдалитьГруппыЗначенийДоступа
РегистрСведенийНаборЗаписей.УдалитьРезультатыОбменаДанными
РегистрСведенийНаборЗаписей.УдалитьРезультатыОбменаДанными
и т. д. Которые вызываются при ЛЮБОМ сохранении данных, в том числе "не стандартных" - Почему при удалении документа (не стандартный "наш документ"), который не участвует в "бизнес процессах" конфигурации, движении резервов, вызываются методы:
ПередУдалениемРегистратораПроверитьНаличиеЗаписейВРезервахТоваровОрганизаций
… и еще там что-то про контроль записи книг покупок/продаж … … задачи по пересчету книг - … много чего еще, если придираться. 🙂
Уточнения:
Тестовая машина:
FX8370/RAM 32 гб/ диски SSD CT1000MX500SSD1 система Win7 и базы на разных дисках
Поскольку RAM в несколько раз больше тестируемой базы, фактически сравниваем «вес вычислений» выполняемых алгоритмов.
Использовались:
Конфигурация: Управление торговлей 11.4.10.62
Платформа: 1С:Предприятие 8.3 (8.3.15.1489)
Если колонка называется «% отклонения», то и считать нужно отклонение, либо назвать колонку «% от эталона».