Аудит, оптимизация, контроль: рецепт повышения быстродействия 1С

06.04.26

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

Пользователи жалуются на медленную работу 1С, система нестабильна под нагрузкой, а попытки «починить» не дают результата? В статье разбираем, как подойти к оптимизации производительности комплексно: от анализа инфраструктуры и базы данных до уровня кода и пользовательских операций. Показываем пошаговый подход «аудит – оптимизация – контроль» и объясняем, какие инструменты помогают быстро выявить и устранить узкие места. На реальном примере проходим путь от первичного мониторинга до внедрения оптимизаций и стабилизации системы.

 

 

 

Когда проблема уже мешает

 

Я регулярно сталкиваюсь с ситуацией, когда от бизнес-пользователей поступают сообщения следующего характера:

«Добрый день! С пятницы начались проблемы при проведении документов ПТУ и списания безналичных. Прошу принять меры».

И когда такие сообщения приходят, это уже, как правило, та точка, когда терпеть дальше невозможно. И бизнес, и IT-отдел понимают: с этим нужно что-то делать.

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

 

 

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

 

Этап 1. Аудит

 

От экспресс-диагностики к полноценному мониторингу

Когда пользователи обращаются с проблемой, критическая точка обычно уже пройдена: действовать нужно сразу. В этот момент нет времени на долгую настройку сложной системы мониторинга.

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

 

 

При этом важно понимать: такой этап нужен именно для быстрого анализа и стабилизации. Позже мы все равно переходим к полноценному стеку мониторинга: Grafana, ELK, Prometheus и Zabbix. Этот подход не отменяет, а дополняет экспресс-аудит.

 

Три слоя IT-ландшафта для сбора метрик

На этапе аудита мы выделяем в IT-ландшафте три слоя: инфраструктура, приложение 1С и база данных.

 

 

На каждом слое собираем свой набор метрик:

  • Инфраструктура – загрузка оборудования: процессор, память, скорость чтения и записи диска, сетевая активность и так далее.

  • Приложение 1С – технологический журнал, замеры времени (APDEX), статистика кластера через утилиту RAC и сервер администрирования RAS.

  • База данных – метрики СУБД: например, pg_stat в PostgreSQL или PerfMon, если MS SQL Server. При необходимости анализируем планы запросов, если нужно переходить к оптимизации.

 

Три инструмента для анализа метрик

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

 

Инструмент №1. RDV. Центр анализа метрик

 

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

 

 

По сути, это связка 1С и ClickHouse, куда сначала загружаются данные.

Схема работы выглядит так:

Собираем данные из разных источников. С помощью простых инструментов на Python и Bash приводим их к единому формату – стандартному CSV. В CSV сохраняем временную метку, имя хоста, счетчики и их значения.

 

 

По заранее настроенным правилам загружаем этот файл в информационную базу 1С через специальную обработку.

 

 

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

В информационной базе 1С храним только метаданные: имена счетчиков, серверов и так далее.

По готовым правилам и шаблонам строим графики и визуализацию метрик, чтобы оценить работу системы.

 

 

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

  • загрузили данные,

  • выбрали шаблоны анализа метрик,

  • нажали «Сформировать» и получили графики.

Пример. Мы сделали визуализацию загрузки CPU. Видно, что 12 ядер процессора загружены неравномерно.

 

 

Это была виртуализированная среда с настройкой: шесть сокетов по два ядра на сокет. Вывод команды lscpu показал:

  • Core(s) per socket: 2

  • Socket(s): 6

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

Мы увидели это на графике, нашли причину и изменили настройку: сделали один сокет с двенадцатью ядрами, что соответствовало реальной физической архитектуре хоста. Вывод команды lscpu показал:

  • Core(s) per socket: 12

  • Socket(s): 1

После этого система начала работать иначе: загрузка стала равномерной, APDEX вырос, увеличилось и количество транзакций в секунду.

 

 

Инструмент №2: RDV-LogA. Анализ технологического журнала за длительный период

 

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

https://github.com/rdv-team/loga

 

 

Это тоже обработка 1С. При ее разработке мы закладывали два ключевых требования: бережное потребление ресурсов и возможность работать с большими объемами данных. Технологический журнал может занимать сотни гигабайт, поэтому обработка умеет работать многопоточно, а количество потоков мы регулируем вручную, чтобы не перегружать сервер.

При этом она минимально использует оперативную память. Один из недавних кейсов – анализ 130 ГБ технологического журнала на ноутбуке, где было около 5 ГБ свободной памяти. Этого оказалось достаточно для работы.

 

 

Второй важный момент – предопределенные шаблоны анализа. Мы заранее настраиваем аналитику: как именно хотим разбирать журнал. Дальше остается указать путь к технологическому журналу, выбрать шаблон, нажать «Запустить» и получить результат в виде Excel-таблиц.

 

 

Шаблон анализа задает:

  • какое событие мы анализируем;

  • какие свойства из него берем;

  • какие группировки выполняем;

  • как сортируем результат.

Дополнительно рассчитываем аналитику: среднее, сумму, общую длительность, медиану, перцентили, стандартное отклонение, минимумы и максимумы.

 

 

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

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

 

 

Инструмент №3: RDV-LogT. Трассировка операций за короткий период по конкретному пользователю

 

Следующий инструмент тоже работает с технологическим журналом, но решает другую задачу.

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

https://github.com/rdv-team/logt

 

 

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

 

 

Наша задача – извлечь из этого потока конкретную операцию. Например, пользователь Иванов записывал документ, а пользователь Петров получал данные динамического списка.

Мы знаем, когда это произошло – у нас есть временная метка из замера времени. Дальше мы определяем границы операции. Они задаются двумя событиями: начало – VRSREQUEST и конец – VRSRESPONSE. Между ними собираем все события, которые относятся к этой операции: запросы, серверные вызовы, SQL, ожидания блокировок, исключения, таймауты – все, что произошло внутри.

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

 

 

Алгоритм следующий: полный технологический журнал обрабатывается Python-скриптом, определяются связанные в одну операцию события, загружаются в ClickHouse.

 

 

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

Рассмотрим, как это происходит.

Выбираем базу, задаем отборы, нажимаем «загрузить» – получаем список операций.

 

 

Каждая строка – это одно действие пользователя: с временной меткой и длительностью. Например, обновление динамического списка – 445 секунд. Очевидно, что это слишком долго. Вызываем «Выполнить анализ операции» и получаем список всех событий внутри.

 

 

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

 

 

Видим текст запроса и большое количество LEFT JOIN. Это сразу наводит на мысль о неявном обращении к полям составного типа и о потенциальной проблеме в самом запросе.

 

 

Найдем код в конфигураторе 1С по контексту этого события.

НовыйЭлемент  = Элементы.Вставить("ВерсииСоглашенияПодразделение", Тип("ПолеФормы"), Элементы.ВерсииСоглашения);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ВерсииСоглашения.Ссылка.Подразделение";
НовыйЭлемент.Заголовок = "Подразделение";

НовыйЭлемент  = Элементы.Вставить("ВерсииСоглашениСрокСогласования", Тип("ПолеФормы"), Элементы.ВерсииСоглашения,Элементы.ВерсииСоглашенияДата);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ВерсииСоглашения.Ссылка.СрокСогласования";
НовыйЭлемент.Заголовок = "Срок согласования"; 

Здесь ВерсииСоглашения.Ссылка является составным типом данных.

После того как мы локализовали проблему и нашли конкретную строчку кода, где она возникает, переходим к этапу оптимизации.

 

Этап 2. Оптимизация

 

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

 

 

Например, если видим, что пользователю в динамическом списке не нужны группировки, но он их использует, хотя 90% пользователей этого не делают, мы можем просто отключить эти группировки. Или добавить в отчет обязательные отборы. Это не меняет бизнес-процесс, но корректирует поведение системы и дает прирост производительности при работе с формой.

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

 

Этап 3. Контроль

 

Для контроля мы возвращаемся к первому этапу аудита и используем те же инструменты. Сбор данных при этом не прекращается: они продолжают архивироваться и накапливаться.

 

 

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

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

 

Что можно сделать прямо сейчас

 

  • Включить технологический журнал. Конфигурационный файл можно взять из нашего репозитория GitHub.

  • Настроить ежедневную архивацию с историей 24 часа.

  • Собрать данные за пару дней или неделю.

  • Скачать инструменты анализа технологического журнала из нашего репозитория GitHub.

  • Дальше все просто: указать путь к журналу, выбрать список шаблонов и нажать «Запустить». В результате получите Excel-таблицы с полезными данными: проблемные операции, их контекст кода и другие метрики.

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

 

Ссылки на инструменты

 

https://github.com/rdv-team/loga

https://github.com/rdv-team/logt

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

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

HighLoad оптимизация Программист 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.

10.11.2025    7571    ivanov660    48    

52

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

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

18.02.2025    9653    ivanov660    39    

61

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

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

24.06.2024    12138    ivanov660    13    

64

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

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

06.06.2024    18623    Evg-Lylyk    73    

46

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

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

13.03.2024    9119    spyke    29    

54

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

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

13.03.2024    12603    vasilev2015    22    

47
Для отправки сообщения требуется регистрация/авторизация