Администрирование · 11 мин
Как оптимизировать 1С и ускорить работу системы
Как оптимизировать 1С: диагностика медленной работы, настройка СУБД и сервера, оптимизация запросов и регламентных заданий, типичные ошибки и FAQ.
Медленная 1С редко тормозит «сама по себе»: почти всегда за просадкой производительности стоит конкретная причина — перегруженный сервер СУБД, неоптимальные запросы в конфигурации, разросшиеся таблицы итогов или конкуренция фоновых заданий за ресурсы. Оптимизация начинается не с покупки железа, а с диагностики: нужно понять, где именно теряется время — на клиенте, на сервере приложений или в базе данных.
Практика показывает, что наибольший эффект дают три направления: настройка СУБД (MS SQL, PostgreSQL), пересмотр регламентных заданий и оптимизация кода проблемных операций. Апгрейд оборудования оправдан только после того, как устранены программные узкие места, иначе вы просто купите более дорогой способ тормозить.
Ниже — прикладной порядок действий: от замера текущей скорости до проверки результата, с границами того, что можно безопасно сделать своими силами, а где лучше привлечь специалиста.
С чего начать: замеры и поиск узкого места
Без исходных замеров оптимизация превращается в гадание. Зафиксируйте время выполнения 3–5 самых болезненных операций: проведение крупного документа, формирование ключевого отчёта, закрытие месяца. Замеры делайте в типичное рабочее время и повторяйте несколько раз, чтобы исключить случайные всплески.
Для поиска причины используйте встроенные инструменты. Технологический журнал кластера 1С позволяет собрать длительные вызовы и запросы к СУБД по событию DBMSSQL или DBPOSTGRS с порогом длительности. В конфигураторе доступен «Замер производительности» (Отладка → Замер производительности), который покажет, какие строки кода занимают больше всего времени.
Параллельно посмотрите на сервер СУБД: загрузку дисковой подсистемы, память, ожидания блокировок. Если запрос в 1С занимает 30 секунд, а на SQL-сервере видны длительные ожидания диска — проблема инфраструктурная. Если запрос сам по себе тяжёлый и сканирует миллионы строк — проблема в коде или индексах.
Проверяйте СУБД, диски, память, регламентные задания
Проверяйте сеть, антивирус, версию платформы на рабочем месте
Делайте замер производительности и анализируйте запрос
Ищите фоновые задания, бэкапы и обмены в это время
Настройка СУБД: где 1С теряет больше всего времени
Большинство просадок производительности клиент-серверной 1С находится на уровне СУБД. Для MS SQL проверьте базовые вещи: достаточно ли памяти выделено серверу (ограничьте max server memory, оставив запас ОС), лежат ли данные и журнал транзакций на разных дисках, не работает ли антивирус с проверкой файлов базы в реальном времени — каталоги СУБД нужно добавить в исключения.
Обслуживание индексов и статистики — обязательный регулярный процесс. По мере работы индексы фрагментируются, а статистика устаревает, и оптимизатор запросов начинает выбирать плохие планы. Настройте план обслуживания: обновление статистики ежедневно или несколько раз в неделю, реорганизацию или перестроение индексов — по мере фрагментации, обычно в нерабочее время.
Для PostgreSQL аналогично важны регулярный VACUUM ANALYZE, корректные настройки памяти (shared_buffers, work_mem) и использование сборки, адаптированной под 1С. Не копируйте чужие конфигурационные файлы без понимания: параметры подбираются под объём базы и ресурсы конкретного сервера.
Обслуживание базы: итоги, версии и журналы
Разросшиеся таблицы — частая причина деградации. Проверьте, какие таблицы занимают больше всего места (в MS SQL это видно через отчёт по использованию диска, в PostgreSQL — через запрос к pg_relation_size). Типичные «тяжеловесы»: регистры накопления и сведений с многолетней историей, таблицы версий объектов, журналы регистрации.
Полезные шаги: свёртка старых периодов по регистрам, если методисты подтвердили, что история не нужна в оперативной работе; отключение версионирования там, где оно не используется; настройка срока хранения журнала регистрации. В файловых базах регулярно выполняйте «Тестирование и исправление» с реиндексацией и сжатием — но только на копии и при отсутствии активных пользователей.
Отдельно проверьте итоги регистров. Если период актуальности итогов «уехал» далеко назад, расчёт текущих остатков будет каждый раз пересчитываться с глубокой даты. Пересчёт итогов и установка актуального периода — штатная операция, которая часто даёт заметное ускорение отчётов по остаткам.
Регламентные и фоновые задания: убираем конкуренцию
Фоновые задания невидимы для пользователей, но именно они часто «съедают» сервер в рабочие часы. Откройте консоль заданий и составьте список всего, что выполняется: обмены, синхронизации, расчёты, загрузка курсов, полнотекстовое индексирование, обновление агрегатов.
Действия по разгрузке: отключите задания, которые никто не использует (частое наследие внедрений); перенесите тяжёлые операции на ночь или на время минимальной нагрузки; разведите по времени задания, которые сейчас стартуют одновременно и блокируют друг друга; для обменов настройте расписание с разумной периодичностью вместо непрерывного цикла.
- 1Выгрузите список всех регламентных заданий с расписаниями и временем последнего выполнения
- 2Отметьте неиспользуемые задания и отключите их, зафиксировав изменение
- 3Перенесите тяжёлые задания (обмены, индексирование) на нерабочие часы
- 4Разведите одновременно стартующие задания с интервалом 10–15 минут
- 5Через неделю проверьте журнал: нет ли ошибок и пропущенных выполнений
Оптимизация кода и запросов
Если замер показал, что время уходит на конкретный запрос или алгоритм, дальше работа идёт в конфигураторе. Классические проблемы: запросы в цикле, обращение к данным через точку от ссылки («разворачивание» ссылок), выборка лишних полей, отсутствие индексов под условия отбора, соединения с виртуальными таблицами без отборов.
Типовые приёмы: вынести запрос из цикла и получить данные одним пакетом; заменить обращения через точку на соединение с таблицей справочника; накладывать отборы на виртуальные таблицы через параметры, а не в секции ГДЕ; проверить план запроса в СУБД и при необходимости добавить индекс по полям отбора. Для тяжёлых расчётов рассмотрите перенос в фоновое выполнение, чтобы не блокировать пользователя.
// Плохо: запрос внутри цикла
Для Каждого Строка Из ТаблицаТоваров Цикл
Запрос = Новый Запрос("ВЫБРАТЬ Цена ИЗ РегистрСведений.Цены ГДЕ Номенклатура = &Ном");
Запрос.УстановитьПараметр("Ном", Строка.Номенклатура);
// ...
КонецЦикла;
// Хорошо: один запрос по всей таблице
Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Цена ИЗ РегистрСведений.Цены ГДЕ Номенклатура В (&СписокНом)");
Запрос.УстановитьПараметр("СписокНом", ТаблицаТоваров.ВыгрузитьКолонку("Номенклатура"));Изменения кода в типовой конфигурации делайте через расширения или механизмы переопределения, чтобы не потерять доработки при обновлении. Любую оптимизацию запроса проверяйте на копии базы с объёмом данных, близким к рабочему, — на пустой тестовой базе плохой запрос может выглядеть быстрым.
Инфраструктура: когда железо действительно помогает
Апгрейд оборудования оправдан, когда программные причины устранены, а ресурсов объективно не хватает. Приоритеты для сервера 1С и СУБД: быстрые диски (SSD/NVMe для базы и журнала транзакций дают самый заметный эффект), достаточный объём оперативной памяти, современный процессор с высокой частотой ядра — многие операции 1С однопоточны, и частота важнее числа ядер.
Для файлового режима критична сеть: база на медленном сетевом диске будет тормозить при любом сервере. Если пользователей больше нескольких человек, переход на клиент-серверный вариант часто даёт больший эффект, чем любая оптимизация файловой базы. Рассмотрите также разделение нагрузки: отдельный сервер под СУБД и отдельный под сервер приложений 1С при росте числа пользователей.
Сравнение вариантов
Первый шаг почти всегда. Дёшево, эффективно, но требует регулярности и аккуратности
Максимальный эффект для конкретных операций, но нужна разработка и тестирование на копии
Оправдан после устранения программных причин; SSD и память дают наибольший прирост
Решение для растущего числа пользователей; требует лицензий и администрирования СУБД
Проверка результата и типичные ошибки
После каждого изменения повторите исходные замеры в сопоставимых условиях. Ускорение должно быть измеримым: например, отчёт формировался 90 секунд, стал 20. Если изменений нет — откатывайте и ищите дальше, не накапливайте «оптимизации» без эффекта.
Как проверить результат
Сократилось при повторных замерах в рабочее время
Не изменилось или выросло — откатить изменение
Кратковременные, не влияют на пользователей
Длинные цепочки блокировок в часы пик
Все задания выполняются по расписанию без ошибок
Пропущенные или падающие задания после переноса
Стабильный объём, журнал транзакций контролируется
Быстрый рост журнала или tempdb
Частые вопросы об оптимизации 1С
С чего начать, если 1С стала тормозить внезапно, а не постепенно?
Внезапная деградация почти всегда имеет триггер: обновление конфигурации или платформы, запуск нового обмена, переполнение диска, изменение настроек СУБД, антивирусное обновление. Проверьте, что менялось в системе за последние дни, посмотрите свободное место на дисках и активность фоновых заданий — в большинстве случаев причина находится именно там.
Поможет ли увеличение оперативной памяти серверу?
Поможет, если память действительно является узким местом: СУБД активно читает данные с диска из-за нехватки кэша. Проверьте показатели попадания в буферный кэш и файлы подкачки. Если запросы тормозят из-за плохих планов или блокировок, дополнительная память эффекта не даст.
Нужно ли регулярно делать «Тестирование и исправление»?
Для файловых баз — да, периодическая реиндексация и сжатие полезны, но выполняйте процедуру на копии и при отсутствии пользователей. Для клиент-серверных баз обслуживание делается средствами СУБД (индексы, статистика), а «Тестирование и исправление» применяется только при подозрении на повреждения данных.
Как понять, что пора переходить с файловой базы на клиент-серверную?
Признаки: несколько одновременно работающих пользователей, частые ошибки блокировок файла базы, медленная работа по сети, рост объёма базы. Файловый режим рассчитан на небольшие коллективы; при росте нагрузки клиент-серверный вариант с MS SQL или PostgreSQL даёт устойчивость и возможность нормальной оптимизации.
Можно ли оптимизировать типовую конфигурацию без снятия с поддержки?
Да. Используйте расширения конфигурации для доработки кода и форм — они не нарушают поддержку и переживают обновления. Настройки СУБД, регламентных заданий, индексов и расписаний вообще не затрагивают конфигурацию. Прямое изменение типового кода — крайняя мера с риском конфликтов при обновлении.
Что важно запомнить
Оптимизация 1С — это цикл «замер → диагностика → точечное изменение → повторный замер». Начинайте с СУБД и фоновых заданий, переходите к коду только по результатам замеров, а железо обновляйте в последнюю очередь. Любые изменения — только после резервной копии и с проверкой результата на реальных операциях.