Ускоряем 1С: от замера до тонкой настройки сервера и кода

· 9 мин

Содержание

Медленная 1С почти никогда не лечится одним действием. Сначала нужно понять, где именно тормозит: клиентское место, сеть, сервер 1С, СУБД или код конфигурации. Если пользователи жалуются «всё долго», без замера вы будете чинить наугад и потратите деньги на железо, которое ничего не изменит.

Разумный порядок такой: замер, затем СУБД и сервер (самое дорогое по эффекту), затем клиенты и сеть, затем код, затем регулярное обслуживание. Ниже все этапы по очереди, от дешёвых проверок к тяжёлым.

Найдите узкое место до того, как что-то менять

Начните с простых вопросов к пользователям. Тормозит всё и у всех или одна операция? Одно рабочее место или весь офис? Всегда или в определённые часы? Ответы сразу сужают круг.

ПризнакВероятная причина
Долго только проведение или один отчётЗапрос или алгоритм в коде
Тормозит у всех в часы пикБлокировки, нагрузка на СУБД, нехватка памяти на сервере
Тормозит на одном компьютереКлиентская машина, кэш, антивирус, сеть до этого места
Долго открываются формы и спискиСеть, большой кэш, тяжёлые динамические списки
Медленно после обновленияНе выполнена реструктуризация, не обновлена статистика СУБД

Для измерений есть три рабочих инструмента:

  1. ✅ Замер времени ключевых операций. Договоритесь с бизнесом, какие 5-10 операций важны (проведение реализации, закрытие месяца , главный отчёт). Замеряйте их секундомером в одно и то же время, до и после каждого изменения. Без цифр «стало лучше» ничего не доказывает.
  2. ✅ Технологический журнал платформы. Пишет в файлы события сервера: долгие вызовы, запросы к СУБД, ожидания на блокировках. Включайте на короткое время и с отбором по длительности, иначе журнал сам нагрузит диск.
  3. ✅ Мониторинг ресурсов сервера. Загрузка процессора, свободная память, очередь к диску. Если диск постоянно занят на 100%, никакая настройка 1С не поможет, дело в накопителе.

Если организация большая, посмотрите в сторону штатных средств оценки производительности: они считают интегральную оценку по ключевым операциям и показывают динамику по дням.

Что проверить в СУБД и как работать с индексами

В клиент-серверном варианте именно СУБД чаще всего оказывается узким местом. 1С строит запросы, а выполняет их MS SQL Server или PostgreSQL, и от качества их настройки зависит многое.

Статистика и индексы. Планировщик выбирает план запроса по статистике. Устаревшая статистика даёт неудачные планы, и запрос, летавший вчера, сегодня идёт минуту. Базовый набор обслуживания:

  • обновление статистики (в MS SQL регулярно, в больших базах ночью; в PostgreSQL ANALYZE, обычно автоматически через autovacuum);
  • перестроение или реорганизация фрагментированных индексов в MS SQL по заданию обслуживания;
  • в PostgreSQL регулярная очистка VACUUM, без неё таблицы «раздуваются».

Индексы в таблицах 1С создаёт платформа по структуре метаданных. Не добавляйте свои индексы прямо в базе SQL-запросами: при следующей реструктуризации они могут пропасть или мешать. Нужен индекс по реквизиту, настраивайте индексирование реквизита в конфигурации.

Память и диск. Для MS SQL Server ограничьте максимальный объём памяти, чтобы он не съедал всё и не душил операционную систему и службы 1С, если они стоят на той же машине. Данные и журнал транзакций держите на разных дисках, база и tempdb лучше на SSD или NVMe. Это самый заметный по эффекту «железный» шаг.

Модель восстановления. Если полные резервные копии делаются, а копии журнала нет, журнал транзакций будет бесконечно расти. Определитесь: либо вы делаете копии журнала по расписанию, либо используете простую модель и принимаете потерю данных с момента последней полной копии. Решение принимает не администратор, а владелец данных.

Настройка сервера 1С:Предприятия и кластера

Сервер 1С и СУБД лучше разнести на разные машины, если пользователей больше нескольких десятков. На одной машине они борются за память и процессор.

Что настраивается на практике:

  • Число рабочих процессов и память. Рабочий процесс 32-разрядной версии упирается в ограничение адресного пространства, поэтому на современных системах используйте 64-разрядную платформу.
  • Безопасный расход памяти. В свойствах рабочего сервера задаются пределы, при которых процесс перезапускается. Это спасает от «вечно растущего» процесса, но перезапуск рвёт сеансы пользователей на нём, поэтому не затягивайте настройку до часов пик.
  • Количество соединений и сеансов. Лишние зависшие сеансы нужно убирать: они держат блокировки и лицензии.
  • Версия платформы. Новые релизы платформы 8.3 регулярно содержат исправления производительности. Обновляйте платформу вместе с конфигурацией, но сначала на копии базы.

Для диагностики сеансов используйте консоль администрирования кластера и утилиту rac, например rac cluster list покажет кластеры. Параметры остальных команд смотрите в справке rac help.

Перед остановкой службы сервера, завершением рабочего процесса или перезагрузкой предупредите пользователей: все их несохранённые данные пропадут. Делайте это вне рабочих часов.

Клиентские места и сеть

Часто виноват не сервер, а один «особенный» компьютер. Пройдитесь по списку:

  1. Антивирус. Добавьте в исключения каталог платформы, кэш 1С и (для файловой базы) каталог с базой. Антивирус, сканирующий каждое обращение к 1Cv8.1CD, способен замедлить работу в разы.
  2. Кэш клиента. Накопившийся кэш форм и настроек иногда вызывает странные задержки. Запустите 1С с параметром /ClearCache в командной строке запуска или удалите каталоги кэша из профиля пользователя (они лежат в %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8). Закройте 1С перед очисткой.
  3. Оперативная память и диск. 4 ГБ на рабочем месте под 1С и браузер сегодня мало, ориентир от 8 ГБ. SSD вместо жёсткого диска ощутимо ускоряет запуск.
  4. Сеть. Для клиент-серверной работы важна задержка, а не только скорость. Пинг до сервера в десятки миллисекунд при работе через VPN уже заметен: 1С делает много мелких обращений. Для удалённых офисов выгоднее терминальный сервер или веб-клиент, чем тонкий клиент через медленный канал.
  5. Режим запуска и интерфейс. Тяжёлые формы со множеством динамических списков открываются дольше. Уберите лишние панели и ненужные колонки в часто открываемых списках.

Для файловой базы добавьте ещё два пункта. Папка с базой должна лежать на быстром диске того компьютера, где она физически хранится, а доступ по сети идёт по протоколу SMB. Переключение на другую версию протокола, нестабильные сетевые карты и старые коммутаторы дают «необъяснимые» тормоза.

Оптимизация кода и запросов в конфигурации

Если тормозит конкретная операция, а железо не загружено, ищите причину в коде. Типичные находки:

  • Запрос в цикле. Обращение к базе на каждой итерации по строкам документа. Замена: один запрос с временной таблицей или соединением, результат раскладывается по соответствию.
  • Виртуальные таблицы без параметров. Остатки или обороты нужно ограничивать параметрами отбора (период, значения измерений) в самой виртуальной таблице, а не условием ГДЕ после неё.
  • Условия с ИЛИ по разным полям. Часто ломают использование индекса. Иногда помогает разбиение на ОБЪЕДИНИТЬ ВСЕ.
  • Соединение с подзапросами и вложенные подзапросы. Выносите их в пакет с временными таблицами и индексируйте поля соединения (ИНДЕКСИРОВАТЬ ПО).
  • Выборка лишних полей и записей. Берите только то, что нужно; добавляйте ПЕРВЫЕ N там, где нужна только часть.
  • Длинные транзакции. Чем дольше транзакция, тем дольше удерживаются блокировки, и тем чаще пользователи ждут друг друга.

Пример замены. Вместо запроса внутри цикла:

Для Каждого Строка Из Товары Цикл
    Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Строка.Номенклатура);
    Результат = Запрос.Выполнить();
КонецЦикла;

делайте один запрос по всему списку значений:

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&Список)");
Запрос.УстановитьПараметр("Список", Товары.ВыгрузитьКолонку("Номенклатура"));
Выборка = Запрос.Выполнить().Выбрать();
Наименования = Новый Соответствие;
Пока Выборка.Следующий() Цикл
    Наименования.Вставить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;

Для типовых конфигураций менять код самостоятельно рискованно: вы теряете возможность простого обновления. Рабочий путь здесь через расширения конфигурации или обращение к поставщику, если проблема в типовом алгоритме.

Для поиска «тяжёлых» запросов удобнее всего технологический журнал и отладчик запросов, а не чтение кода наугад: сначала найдите, какой запрос съедает время.

Блокировки

Если пользователи жалуются на сообщения вроде «Не удалось выполнить операцию: превышено время ожидания блокировки», дело в конкуренции за данные. Посмотрите, нет ли долгих фоновых заданий (закрытие месяца, массовое проведение), которые идут в рабочие часы. Перенесите их на ночь.

Какой вариант работы выбрать: файловый или клиент-сервер

Файловый вариант хранит базу одним файлом 1Cv8.1CD, и каждый клиент читает его напрямую. Клиент-серверный вариант добавляет сервер 1С и СУБД.

КритерийФайловаяКлиент-сервер
Число одновременных пользователейЕдиницы и небольшие десятки; дальше деградируетДесятки и сотни
Размер базыНебольшие и средниеЛюбой, ограничен СУБД
АдминистрированиеПростоеНужны настройка СУБД и сервера
БлокировкиГрубые, на уровне файлаБолее тонкие, на уровне записей
СтоимостьНижеВыше (сервер, лицензии на СУБД, администратор)

Точной границы нет: она зависит от числа операций записи и тяжести конфигурации. Практический признак, что пора переезжать: при работе нескольких пользователей начинаются задержки проведения и сообщения о блокировках, а файл базы растёт до гигабайтов.

Переход выполняется выгрузкой информационной базы в файл .dt и загрузкой в новую базу на сервере. Выгрузку и загрузку проводите в монопольном режиме, а перед ними сделайте копию. После загрузки обязательно обновите статистику в СУБД.

Регламентные операции и обслуживание

Скорость падает не сразу, а постепенно, если базу не обслуживать. Составьте календарь:

  • 🗓 Ежедневно. Резервные копии, контроль свободного места на дисках, просмотр ошибок в журнале регистрации.
  • 🗓 Еженедельно. Обновление статистики и обслуживание индексов СУБД (если не настроено чаще).
  • 🗓 Ежемесячно. Проверка размера базы и журнала регистрации, чистка устаревших данных и временных файлов.
  • 🗓 По необходимости. Тестирование и исправление информационной базы в Конфигураторе: меню Администрирование → Тестирование и исправление. Запускайте после аварий и сбоев, с копией на руках и в монопольном режиме.

В самой конфигурации есть регламентные и фоновые задания, например пересчёт итогов регистров и актуализация данных. Если их выключить, отчёты на больших периодах начнут строиться заметно дольше. Список заданий в типовых конфигурациях находится в разделе Администрирование, ищите пункт про регламентные и фоновые задания.

Журнал регистрации тоже растёт. Его разбивают по периодам и периодически переносят старые записи в архив, иначе открытие журнала занимает минуты.

Если базе много лет и там гигабайты неактуальных данных, подумайте о свёртке: выгрузке остатков в новую базу. Это отдельный проект, который нужно согласовать с бухгалтерией и аудитом.

Если не помогло

Когда вы прошли все шаги, а эффекта нет, сделайте вот что:

  1. Снова снимите замеры и сравните с исходными. Возможно, вы улучшили одну операцию, а жалобы про другую.
  2. Проверьте, не стал ли узким местом диск или сеть: нагрузка на них часто маскируется под «медленную 1С».
  3. Воспроизведите проблему на копии базы на отдельном сервере. Если там быстро, причина в окружении рабочей среды; если медленно, в данных или коде.
  4. Привлеките специалиста по технологическому журналу и планам запросов. Это узкая компетенция, и час работы специалиста дешевле месяцев экспериментов.
Порядок работ по ускорению
Выполнено: 0 / 7

Частые вопросы

Поможет ли просто добавить оперативной памяти на сервер?
Если процессор и диск не загружены, а сервер активно использует файл подкачки, память поможет. Если же узкое место запрос или диск, прироста не будет. Проверьте нагрузку до покупки.
Можно ли ускорить 1С, не меняя железо?
Да. Обслуживание статистики и индексов, исключения антивируса, чистка кэша и устранение запроса в цикле часто дают больше, чем новый сервер.
Как часто нужно перестраивать индексы?
Для активно используемых баз обычно раз в неделю, для небольших реже. Ориентируйтесь на уровень фрагментации, а не на календарь.
Почему после обновления конфигурации 1С стала медленнее?
Чаще всего после реструктуризации не обновилась статистика в СУБД, либо в фоне ещё идут отложенные обработки обновления. Дождитесь их завершения и обновите статистику.
Нужен ли отдельный сервер под СУБД?
Для нескольких десятков пользователей и больше желательно: СУБД и сервер 1С не будут делить память и процессор.