Медленные системы на 1С почти всегда тормозят по одним и тем же причинам. На собесе дают код и просят найти проблемы, а senior рассказывают, как расследовали инцидент.
Типовые ошибки в коде
Запрос в цикле. Каждая итерация это обращение к СУБД. Решение: один запрос по всем строкам (параметр-массив, табличная часть во временной таблице).
Обращение через точку. Строка.Номенклатура.ВидНоменклатуры во встроенном языке читает объект номенклатуры целиком. В цикле это тысячи чтений. Решение: запрос со всеми нужными полями, для единичных случаев функции БСП:
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, "ИНН, КПП");
ПолучитьОбъект ради чтения. Загружает объект с табличными частями.
Поиск по наименованию. Медленно и ненадёжно, ищут по коду, артикулу, ИНН, GUID.
Лишние серверные вызовы с формы и передача контекста формы.
Ошибки в запросах
- Условия на измерения в ГДЕ вместо параметров виртуальных таблиц.
- Цепочки точек и точки от составных полей.
- Соединения с подзапросами и виртуальными таблицами без отбора: оптимизатор СУБД ошибается в оценках. Рекомендация: временная таблица с индексом.
- Функции над полями в условиях (ГОД(Дата) = 2026) мешают индексам: используйте диапазоны.
- ПОДОБНО с % в начале не использует индекс.
- Отбор по неиндексированным реквизитам: у реквизита свойство «Индексировать».
Длинные транзакции
Тяжёлое проведение, обмены одной транзакцией, внешние вызовы внутри транзакции: всё это держит блокировки и останавливает других пользователей.
Инструменты
| Вопрос | Инструмент |
|---|---|
| Какая строка моей операции медленная | Замер производительности в отладчике |
| Какие запросы на сервере долгие | Технологический журнал, DBMSSQL или DBPOSTGRS |
| Кто кого ждал | Технологический журнал, TLOCK, TTIMEOUT, TDEADLOCK |
| Как меняется скорость ключевых операций | ЦУП, APDEX |
| Кто изменил документ | Журнал регистрации |
Технологический журнал настраивается файлом logcfg.xml: события, пороги длительности, свойства (контекст, текст запроса, план).
APDEX = (довольные + терпимые / 2) / все замеры. Довольные уложились в целевое время T, терпимые в 4T. 1 означает «всё быстро».
Как расследовать
- Понять картину: всегда или иногда, у кого, когда. «Иногда» часто означает блокировки или особые данные.
- Замерить: код, запросы, ожидания.
- Найти узкое место, а не оптимизировать всё подряд.
- Исправить и замерить на копии с рабочими данными.
- Поставить ключевую операцию на мониторинг.
Пример переписывания
Было: цикл по товарам документа, в каждой итерации запрос цены и остатка, обращение к единице измерения через точку. Стало: один пакетный запрос, где товары документа во временной таблице, соединённой со срезом цен, остатками и справочником единиц. Время упало с секунд до десятков миллисекунд.
Что спросят на собесе
- Найдите проблемы производительности в коде.
- Почему обращение через точку медленное и как его заменить?
- Как найти медленные запросы на рабочем сервере?
- Что такое APDEX и ЦУП?
- Расскажите, как вы расследовали медленную операцию.