Администрирование · 10 мин
Как работает замер производительности в 1С
Как работает замер производительности в 1С: технологический журнал, ЦУП, замеры в отладчике, анализ запросов и типичные причины медленной работы.
Замер производительности в 1С — это сбор данных о том, сколько времени занимает выполнение конкретных операций: проведение документа, формирование отчёта, открытие формы, выполнение запроса к базе данных. Без замера оптимизация превращается в гадание: разработчик меняет код «на глаз», а реальная причина тормозов остаётся нетронутой.
Платформа 1С:Предприятие предлагает несколько встроенных механизмов замера: технологический журнал, режим замера в конфигураторе, центр управления производительностью (ЦУП) и программные средства вроде объекта «ОписаниеОповещения» с фиксацией времени через ТекущаяДатаСеанса. Каждый инструмент отвечает на свой вопрос: где именно теряется время — на клиенте, на сервере 1С или в СУБД.
Ключевой принцип любого замера — воспроизводимость. Операцию нужно выполнить несколько раз в одинаковых условиях, зафиксировать время до изменений и после, и только тогда делать выводы. Разовый замер на «холодном» кэше почти всегда вводит в заблуждение.
Какие инструменты замера есть в платформе
Платформа 1С предоставляет три основных уровня инструментов. Первый — встроенный замер производительности в конфигураторе, который показывает время выполнения по строкам кода и модулям. Второй — технологический журнал, фиксирующий события на уровне сервера: запросы к СУБД, вызовы, блокировки, длительные операции. Третий — ЦУП (центр управления производительностью), отдельная конфигурация для постоянного мониторинга и анализа показателей.
Дополнительно используются средства самой СУБД: план запроса в MS SQL Server или PostgreSQL, динамические представления, профилировщик. Часто замер в 1С показывает, что время уходит в запрос, а причину — отсутствующий индекс или неоптимальный план — видно только на стороне СУБД.
Сравнение инструментов замера
Подходит для разбора конкретного участка кода по строкам; требует запуска отладки и не показывает запросы СУБД детально
Фиксирует запросы, вызовы и блокировки на сервере; требует настройки logcfg.xml и анализа больших файлов
Даёт постоянный мониторинг и аналитику по показателям; требует развёртывания отдельной базы и настройки
Показывают план и статистику запроса; требуют прав доступа к серверу БД и знания конкретной СУБД
Как сделать замер в конфигураторе
Самый быстрый способ понять, какая строка кода тормозит, — встроенный замер производительности. Он запускается из конфигуратора при активной отладке: меню «Отладка» — «Замер производительности» — «Начать замер». После этого в отлаживаемом сеансе выполняют проблемную операцию, затем останавливают замер.
Результат отображается в виде таблицы: модуль, строка, количество вызовов, чистое и суммарное время, процент от общего времени. Колонка «Суммарное время» включает вложенные вызовы, «Чистое время» — только саму строку. Сортировка по чистому времени сразу показывает «горячие» строки.
- 1Запустите отладку и дойдите до точки перед проблемной операцией
- 2Включите замер: Отладка — Замер производительности — Начать замер
- 3Выполните операцию в клиентском приложении один раз
- 4Остановите замер и отсортируйте результат по чистому времени
- 5Повторите замер 2–3 раза и сравните, чтобы исключить случайные всплески
Важно учитывать, что замер в конфигураторе сам по себе замедляет выполнение — отладка добавляет накладные расходы. Поэтому абсолютные цифры в этом режиме ориентировочные, а вот относительная картина (какая строка съедает большую часть времени) достоверна.
Технологический журнал: что и как фиксировать
Технологический журнал (ТЖ) — это текстовые логи, которые кластер серверов 1С пишет по правилам из файла logcfg.xml. Для анализа производительности ключевые события: DBMSSQL или DBPOSTGRS (запросы к СУБД), CALL (вызовы сервера), EXCP (исключения), TLOCK и TDEADLOCK (блокировки), SDBL (операции с базой через механизм 1С).
Чтобы не собирать гигабайты мусора, в logcfg.xml настраивают фильтры: например, фиксировать только запросы длительнее определённого порога через свойство duration. Типовой подход — задать порог 1–3 секунды для интерактивных операций и анализировать всё, что его превышает.
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1clogs" history="24">
<event><eq property="name" value="DBMSSQL"/></event>
<event><eq property="name" value="TLOCK"/></event>
<property name="all"/>
</log>
</config>После сбора логов их анализируют вручную или специализированными обработками, которые группируют запросы по тексту, считают суммарную длительность и количество повторов. Частая находка — один и тот же запрос, выполняющийся сотни раз в цикле вместо одного запроса с группировкой.
ЦУП и постоянный мониторинг
Центр управления производительностью — это отдельная конфигурация от фирмы «1С», которая собирает показатели с рабочих баз и строит аналитику: длительность ключевых операций, деградация по времени, сравнение до и после обновления. ЦУП оправдан, когда база большая, пользователей много и проблемы производительности возникают регулярно.
Для разового разбора конкретной жалобы («отчёт формируется 10 минут») развёртывать ЦУП избыточно — быстрее сработать связкой «замер в конфигураторе + технологический журнал». ЦУП даёт выигрыш именно на дистанции: он позволяет заметить деградацию до того, как пользователи начнут жаловаться.
Как интерпретировать результаты замера
Главная задача интерпретации — определить, где теряется время. Если в замере конфигуратора лидируют строки с запросами и обращениями к данным — проблема на уровне СУБД или структуры запроса. Если лидируют строки с вычислениями, обходами коллекций, работой со строками — проблема в алгоритме. Если чистое время строк невелико, но операция в целом долгая — ищите клиент-серверные вызовы в цикле или ожидание на блокировках.
Как выбрать действие по результату замера
Отдельный случай — блокировки. Если операция «висит», а в замере видно длительное ожидание без нагрузки на процессор, смотрите события TLOCK в технологическом журнале и активные сессии в консоли кластера. Типичная причина — длинная транзакция одного пользователя, блокирующая записи, нужные другим.
Типичные ошибки при замере производительности
Ещё одна распространённая ошибка — оптимизация на тестовой базе с небольшим объёмом данных. Запрос, который на тысяче записей работает мгновенно, на миллионе может выполняться минутами. Замеры и проверку оптимизации следует делать на копии рабочей базы с реальным объёмом.
Как проверить, что оптимизация сработала
Критерий успеха — повторный замер в тех же условиях. Зафиксируйте время операции до изменений (лучше среднее из нескольких прогонов), внесите правку, затем выполните замер повторно. Сравнивайте не только общее время, но и структуру: исчезла ли «горячая» строка, сократилось ли количество запросов к СУБД, ушли ли блокировки из технологического журнала.
Как проверить результат
Стабильно ниже исходного на нескольких замерах
Улучшение видно только один раз или время скачет
Число запросов сократилось, нет повторов в цикле
Запросов столько же или больше, изменился только код
Ожидания и взаимоблокировки отсутствуют
Блокировки сохраняются или появились новые
Ускорение подтверждается на копии рабочей базы
Эффект виден только на маленькой тестовой базе
Если после правки ускорилась одна операция, но замедлилась другая — например, запрос с новым индексом стал быстрее, а запись в таблицу медленнее — оценивайте баланс. Индексы ускоряют чтение, но добавляют затраты на запись, и это нормальное следствие, а не ошибка.
Что важно запомнить
Замер производительности в 1С строится на трёх инструментах: замер в конфигураторе показывает горячие строки кода, технологический журнал — запросы и блокировки, ЦУП — динамику во времени. Замеряйте до и после изменений, повторяйте прогоны и проверяйте результат на реальном объёме данных.
Частые вопросы
Можно ли замерить производительность без конфигуратора и отладки?
Да. Технологический журнал настраивается на уровне сервера и не требует отладки, а для прикладного кода можно программно фиксировать время через ТекущаяДатаСеанса до и после операции и записывать результат в журнал регистрации или регистр сведений.
Почему одна и та же операция выполняется то быстро, то медленно?
Чаще всего причины — состояние кэша СУБД, параллельная нагрузка других пользователей и блокировки. Поэтому замеры выполняют серией прогонов и фиксируют условия: время суток, объём данных, число активных сеансов.
Что делать, если замер показывает, что тормозит запрос к СУБД?
Снимите план запроса средствами СУБД и проверьте, используются ли индексы, нет ли полного сканирования больших таблиц. Часто помогает добавление индекса, переформулировка условий отбора или замена виртуальных таблиц на временные с предварительным отбором.
Сколько места занимают логи технологического журнала?
Объём сильно зависит от нагрузки и фильтров: без ограничений на активной базе логи могут расти на гигабайты в час. Ограничивайте события по длительности, задавайте глубину хранения в logcfg.xml и следите за свободным местом на диске с логами.
Нужен ли ЦУП в небольшой компании?
Как правило, нет. При небольшом числе пользователей и редких проблемах достаточно замера в конфигураторе и технологического журнала. ЦУП окупается там, где нужен постоянный мониторинг нескольких баз и контроль деградации производительности.