Каждый разработчик 1С рано или поздно сталкивается с замедлением информационной базы при росте количества одновременных сеансов. В этой статье мы обобщили ключевые правила архитектуры высоконагруженных систем на 1С.
Правило №1: Никогда не фильтруйте виртуальные таблицы через секцию ГДЕ
Фильтрация в секции ГДЕ заставляет СУБД сначала рассчитать виртуальную таблицу целиком со всеми итогами, а затем отфильтровать результат. Всегда передавайте условия в параметры виртуальной таблицы!
// ПЛОХО: колоссальная нагрузка на TempDB / память СУБД
ВЫБРАТЬ Номенклатура, КоличествоОстаток
ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки() КАК Ост
ГДЕ Ост.Склад = &Склад; // ОШИБКА АРХИТЕКТУРЫ
// ХОРОШО: фильтрация на этапе чтения индекса и среза итогов
ВЫБРАТЬ Номенклатура, КоличествоОстаток
ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки(, Склад = &Склад) КАК Ост;
Правило №2: Индексируйте поля соединений во временных таблицах
Если временная таблица содержит более 100 записей и участвует в ЛЕВОМ СОЕДИНЕНИИ, отсутствие индекса приводит к полному сканированию (Table Scan). Указывайте ИНДЕКСИРОВАТЬ ПО при выгрузке данных во временную таблицу.
Тормозят отчеты или виснут блокировки в 1С?
Проведу детальный анализ технологического журнала, соберу метрики APDEX и устраню узкие места кода с гарантией результата.