1С “тормозит”: поиск и варианты решения проблем Экстрактора 1С
В некоторых случаях может казаться, что 1С “тормозит” из-за Экстрактора 1С. В данной статье рассмотрены некоторые методы поиска проблем Экстрактора.
В Экстракторе 1С влиять на производительность предположительно может работа двух функций:
“Выгрузка данных”;
“Регистрация изменений”.
Рассмотрим варианты решения проблемы производительности в обоих случаях.
Стоит отметить, что измерять производительность, основываясь на субъективных оценочных суждениях — не лучший вариант. Рекомендуем для оценки производительности использовать методики 1С, например:
Замер производительности для оптимизации клиент-серверных приложений в 1С:Предприятии 8.
Специализированные инструменты от компании 1С (ЦУП и др.)
Специализированные инструменты от сторонних сервисов (Gilev.ru и др.)
Другой вариант измерения производительности, который менее предпочтителен — это запустить массовое проведение проблемных документов (например, запись проблемного справочника):
До регистрации изменений (о них в разделе ниже);
После подключения регистрации изменений.
Желательно, при этом работать на копии базы 1С, чтобы исключить непредсказуемое влияние пользователей в рабочей базе, а также перегружая сервер 1С, чтобы очистить кэш.
Производительность при выгрузке данных и оптимизация
Снижение скорости работы 1С возможно в обоих случаях, но при выгрузке данных снижение производительности 1С будет заметно только в моменты, когда запустилось регламентное задание с выгрузкой того или иного “Проекта”. Данный вариант снижения производительности отслеживается достаточно легко.
Если 1С начинает “тормозить”, когда выполняется регламентное задание Экстрактора 1С, рекомендуем сделать оптимизацию настроек, для этого:
в поле “Обрабатывать записей в очереди за один запуск, не более:” установите некое количество (по умолчанию установлено 0, т.е. за одну выгрузку обрабатывается вся накопленная очередь);
в поле “Максимальное количество элементов очереди в одной выгрузке:” установите 1или 0;
в поле “Максимальное количество потоков:” установите не более 4 (а лучше, менее 4);
проверьте, что параллельно, в один и тот же момент времени, у Вас не запускается много “Проектов”.
Если вышеописанный способ не помог, то рекомендуем сделать оптимизацию запроса 1С.
Данный вариант актуален в случае, если в качестве “Источника” Вы используете “Запрос 1С”.
Для оптимизации запроса 1С:
уберите группировки и сортировки в этом запросе;
уберите отсылки и конструкции “Построителя отчетов”;
обдумайте сегментацию и сделайте сегмент выгрузки меньше.
Производительность при регистрации изменений и оптимизация
Экстрактор 1С позволяет отслеживать изменения в 1С и выгружать их. Регистрация изменений осуществляется с помощью функционала “Подписки на события”.
Подписки на события “по умолчанию” отслеживают следующие изменения:
изменения во всех справочниках;
изменения во всех документах;
изменения во всех регистрах;
изменения во всех планах видов характеристик;
изменения в планах счетов, субконто и т.д.
И регистрируют их во встроенном в Экстрактор 1С регистре сведений “Очередь изменений”.
Данный подход для некоторых баз может приводить к повышенной нагрузке на 1С.
Решением, в данном случае, является использования “Генератора подписок”, который позволяет отметить только те объекты, которые действительно необходимо отслеживать в подписках, тем самым снижая нагрузку на 1С.
Однако, для некоторых баз (особенно для баз свыше 1000 пользователей) “узким” местом может стать именно момент “записи” в регистр сведений “Очередь изменений”. Решением является переключение регистрации изменений во внешнюю СУБД Redis.
Redis (а также Apache Ignite) - это специализированная база данных “ключ-значение”, которая часто используется в высоконагруженных проектах для кеширования данных.
Для переключения регистрации изменений во внешнюю СУБД Redis произведите настройку сервиса по статье Внешняя очередь регистрации изменений на Redis, затем, в Экстракторе 1С, в разделе “Настройки” пропишите адрес http_redis.
После чего, вся очередь изменений будет собираться не в регистре сведений “Очередь изменений”, а в СУБД Redis.
В целом, алгоритм поиска решения данной проблемы выглядит так: