Проблемы с производительностью в крупных базах 1С, особенно при использовании расширений для работы с маркетплейсами, — это классическая ситуация для высоконагруженных систем. Когда база достигает объема в сотни гигабайт (в нашем случае 430 ГБ), а интерфейс начинает «подмерзать» даже в простое, необходимо переходить от поверхностного наблюдения к глубокой диагностике. Разберем пошагово, как выявить виновников нагрузки и оптимизировать систему.
Прежде чем приступать к анализу кода, нам необходимо понять, на каком уровне происходит «затык». Рассмотрим основные показатели. Если тест Гилёва показывает значительное падение под нагрузкой (с 30 до 17 единиц), это явный признак нехватки ресурсов процессора или блокировок на уровне СУБД.
Проанализируем настройки сервера:
Shared Memory. Это исключит лишние накладные расходы на сетевой стек.MAXDOP (Maximum Degree of Parallelism). Рекомендуем установить его в значение 1. Это предотвратит ситуацию, когда один тяжелый запрос от расширения маркетплейса пытается захватить все 10 ядер процессора, парализуя работу остальных пользователей. Также проверим Cost Threshold for Parallelism — значение должно быть не ниже 50.В современных конфигурациях, таких как 1С:Комплексная автоматизация 2.5, встроен мощный механизм на базе БСП для мониторинга скорости работы. Рассмотрим, как его активировать.
Перейдем в раздел НСИ и администрирование — Обслуживание — Оценка производительности. Здесь необходимо установить флаг Оценка производительности. После этого система начнет записывать время выполнения ключевых операций.
Выполним следующие действия:
Ситуация, когда пользователь ничего не делает, а курсор показывает загрузку, часто указывает на работу обработчиков ожидания на клиенте. В расширениях для маркетплейсов разработчики часто используют механизмы периодического опроса сервера.
Проанализируем код:
Нам нужно найти использование метода ПодключитьОбработчикОжидания. Разберем пример, который может вызывать фризы интерфейса:
// Пример потенциально опасного кода в расширении
Процедура ПриНачалеРаботыСистемы()
// Интервал 5 секунд слишком мал для тяжелых запросов
ПодключитьОбработчикОжидания("ПроверитьСтатусыЗаказовМаркетплейсов", 5);
КонецПроцедуры
Если процедура ПроверитьСтатусыЗаказовМаркетплейсов обращается к базе данных или выполняет тяжелые вычисления на сервере, интерфейс будет «замирать» каждые 5 секунд. Выясним, есть ли такие вызовы в модулях расширений, и попробуем увеличить интервал до разумных пределов (например, 300 секунд).
Если консоль заданий не дает полной картины, воспользуемся Замером производительности в конфигураторе. Это позволит увидеть, на каких именно строках кода «висят» фоновые процессы.
Выполним замер по шагам:
BackgroundJob).Замер производительности (F12).В открывшемся окне мы увидим таблицу. Обратим внимание на колонку «Чистое время». Именно здесь будут видны процедуры расширений маркетплейсов, которые потребляют 90% ресурсов. Часто это оказываются запросы к огромным регистрам сведений без использования индексов.
Вы упоминали, что почти половину базы (около 200 ГБ) занимают регистры маркетплейсов. Это критический момент. Даже если регламентное задание просто «просматривает» такой регистр, это создает колоссальную нагрузку на дисковую подсистему NVMe и оперативную память.
Рекомендации по оптимизации данных:
НаборЗаписей. При таком объеме лог транзакций SQL переполнится мгновенно. Лучше использовать порционное удаление или, если это допустимо, TRUNCATE TABLE на уровне СУБД (с последующим пересчетом итогов).Reorganize и Rebuild индексов. Без этого SQL-сервер продолжит «спотыкаться» о пустые страницы в файлах базы данных.Для окончательного выявления «виновников» среди регламентных заданий, настроим сбор событий DBMSSQL и CALL. Это позволит увидеть текст SQL-запроса, который выполняется слишком долго.
Пример файла настроек logcfg.xml для поиска долгих запросов (более 10 секунд):
<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
<log location="C:\Logs\1C\LongQueries" history="24">
<event>
<eq property="Name" value="DBMSSQL"/>
<gt property="Duration" value="10000000"/>
</event>
<event>
<eq property="Name" value="CALL"/>
<gt property="Duration" value="10000000"/>
</event>
<property name="all"/>
</log>
</config>
Проанализировав логи ТЖ, мы получим точный список методов 1С и соответствующих им тяжелых SQL-запросов. Это даст неопровержимые доказательства для разработчиков расширений о необходимости оптимизации их кода.
Подведем итог: диагностика производительности в 1С:КА 2.5 при наличии тяжелых расширений должна быть комплексной. Начнем с настройки SQL (MAXDOP, Shared Memory), продолжим анализом клиентских обработчиков ожидания и закончим детальным замером производительности фоновых заданий через конфигуратор или ТЖ. Только так можно превратить «тормозящую» систему в эффективный инструмент бизнеса.