Ускоряем 1С: от замера до тонкой настройки сервера и кода
Содержание
Медленная 1С почти никогда не лечится одним действием. Сначала нужно понять, где именно тормозит: клиентское место, сеть, сервер 1С, СУБД или код конфигурации. Если пользователи жалуются «всё долго», без замера вы будете чинить наугад и потратите деньги на железо, которое ничего не изменит.
Разумный порядок такой: замер, затем СУБД и сервер (самое дорогое по эффекту), затем клиенты и сеть, затем код, затем регулярное обслуживание. Ниже все этапы по очереди, от дешёвых проверок к тяжёлым.
Найдите узкое место до того, как что-то менять
Начните с простых вопросов к пользователям. Тормозит всё и у всех или одна операция? Одно рабочее место или весь офис? Всегда или в определённые часы? Ответы сразу сужают круг.
| Признак | Вероятная причина |
|---|---|
| Долго только проведение или один отчёт | Запрос или алгоритм в коде |
| Тормозит у всех в часы пик | Блокировки, нагрузка на СУБД, нехватка памяти на сервере |
| Тормозит на одном компьютере | Клиентская машина, кэш, антивирус, сеть до этого места |
| Долго открываются формы и списки | Сеть, большой кэш, тяжёлые динамические списки |
| Медленно после обновления | Не выполнена реструктуризация, не обновлена статистика СУБД |
Для измерений есть три рабочих инструмента:
- ✅ Замер времени ключевых операций. Договоритесь с бизнесом, какие 5-10 операций важны (проведение реализации, закрытие месяца , главный отчёт). Замеряйте их секундомером в одно и то же время, до и после каждого изменения. Без цифр «стало лучше» ничего не доказывает.
- ✅ Технологический журнал платформы. Пишет в файлы события сервера: долгие вызовы, запросы к СУБД, ожидания на блокировках. Включайте на короткое время и с отбором по длительности, иначе журнал сам нагрузит диск.
- ✅ Мониторинг ресурсов сервера. Загрузка процессора, свободная память, очередь к диску. Если диск постоянно занят на 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С и (для файловой базы) каталог с базой. Антивирус, сканирующий каждое обращение к
1Cv8.1CD, способен замедлить работу в разы. - Кэш клиента. Накопившийся кэш форм и настроек иногда вызывает странные задержки. Запустите 1С с параметром
/ClearCacheв командной строке запуска или удалите каталоги кэша из профиля пользователя (они лежат в%LOCALAPPDATA%\1C\1cv8и%APPDATA%\1C\1cv8). Закройте 1С перед очисткой. - Оперативная память и диск. 4 ГБ на рабочем месте под 1С и браузер сегодня мало, ориентир от 8 ГБ. SSD вместо жёсткого диска ощутимо ускоряет запуск.
- Сеть. Для клиент-серверной работы важна задержка, а не только скорость. Пинг до сервера в десятки миллисекунд при работе через VPN уже заметен: 1С делает много мелких обращений. Для удалённых офисов выгоднее терминальный сервер или веб-клиент, чем тонкий клиент через медленный канал.
- Режим запуска и интерфейс. Тяжёлые формы со множеством динамических списков открываются дольше. Уберите лишние панели и ненужные колонки в часто открываемых списках.
Для файловой базы добавьте ещё два пункта. Папка с базой должна лежать на быстром диске того компьютера, где она физически хранится, а доступ по сети идёт по протоколу SMB. Переключение на другую версию протокола, нестабильные сетевые карты и старые коммутаторы дают «необъяснимые» тормоза.
Оптимизация кода и запросов в конфигурации
Если тормозит конкретная операция, а железо не загружено, ищите причину в коде. Типичные находки:
- Запрос в цикле. Обращение к базе на каждой итерации по строкам документа. Замена: один запрос с временной таблицей или соединением, результат раскладывается по соответствию.
- Виртуальные таблицы без параметров. Остатки или обороты нужно ограничивать параметрами отбора (период, значения измерений) в самой виртуальной таблице, а не условием
ГДЕпосле неё. - Условия с
ИЛИпо разным полям. Часто ломают использование индекса. Иногда помогает разбиение наОБЪЕДИНИТЬ ВСЕ. - Соединение с подзапросами и вложенные подзапросы. Выносите их в пакет с временными таблицами и индексируйте поля соединения (
ИНДЕКСИРОВАТЬ ПО). - Выборка лишних полей и записей. Берите только то, что нужно; добавляйте
ПЕРВЫЕ Nтам, где нужна только часть. - Длинные транзакции. Чем дольше транзакция, тем дольше удерживаются блокировки, и тем чаще пользователи ждут друг друга.
Пример замены. Вместо запроса внутри цикла:
Для Каждого Строка Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Строка.Номенклатура);
Результат = Запрос.Выполнить();
КонецЦикла;
делайте один запрос по всему списку значений:
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&Список)");
Запрос.УстановитьПараметр("Список", Товары.ВыгрузитьКолонку("Номенклатура"));
Выборка = Запрос.Выполнить().Выбрать();
Наименования = Новый Соответствие;
Пока Выборка.Следующий() Цикл
Наименования.Вставить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;
Для типовых конфигураций менять код самостоятельно рискованно: вы теряете возможность простого обновления. Рабочий путь здесь через расширения конфигурации или обращение к поставщику, если проблема в типовом алгоритме.
Для поиска «тяжёлых» запросов удобнее всего технологический журнал и отладчик запросов, а не чтение кода наугад: сначала найдите, какой запрос съедает время.
Блокировки
Если пользователи жалуются на сообщения вроде «Не удалось выполнить операцию: превышено время ожидания блокировки», дело в конкуренции за данные. Посмотрите, нет ли долгих фоновых заданий (закрытие месяца, массовое проведение), которые идут в рабочие часы. Перенесите их на ночь.
Какой вариант работы выбрать: файловый или клиент-сервер
Файловый вариант хранит базу одним файлом 1Cv8.1CD, и каждый клиент читает его напрямую. Клиент-серверный вариант добавляет сервер 1С и СУБД.
| Критерий | Файловая | Клиент-сервер |
|---|---|---|
| Число одновременных пользователей | Единицы и небольшие десятки; дальше деградирует | Десятки и сотни |
| Размер базы | Небольшие и средние | Любой, ограничен СУБД |
| Администрирование | Простое | Нужны настройка СУБД и сервера |
| Блокировки | Грубые, на уровне файла | Более тонкие, на уровне записей |
| Стоимость | Ниже | Выше (сервер, лицензии на СУБД, администратор) |
Точной границы нет: она зависит от числа операций записи и тяжести конфигурации. Практический признак, что пора переезжать: при работе нескольких пользователей начинаются задержки проведения и сообщения о блокировках, а файл базы растёт до гигабайтов.
Переход выполняется выгрузкой информационной базы в файл .dt и загрузкой в новую базу на сервере. Выгрузку и загрузку проводите в монопольном режиме, а перед ними сделайте копию. После загрузки обязательно обновите статистику в СУБД.
Регламентные операции и обслуживание
Скорость падает не сразу, а постепенно, если базу не обслуживать. Составьте календарь:
- 🗓 Ежедневно. Резервные копии, контроль свободного места на дисках, просмотр ошибок в журнале регистрации.
- 🗓 Еженедельно. Обновление статистики и обслуживание индексов СУБД (если не настроено чаще).
- 🗓 Ежемесячно. Проверка размера базы и журнала регистрации, чистка устаревших данных и временных файлов.
- 🗓 По необходимости. Тестирование и исправление информационной базы в Конфигураторе: меню
Администрирование → Тестирование и исправление. Запускайте после аварий и сбоев, с копией на руках и в монопольном режиме.
В самой конфигурации есть регламентные и фоновые задания, например пересчёт итогов регистров и актуализация данных. Если их выключить, отчёты на больших периодах начнут строиться заметно дольше. Список заданий в типовых конфигурациях находится в разделе Администрирование, ищите пункт про регламентные и фоновые задания.
Журнал регистрации тоже растёт. Его разбивают по периодам и периодически переносят старые записи в архив, иначе открытие журнала занимает минуты.
Если базе много лет и там гигабайты неактуальных данных, подумайте о свёртке: выгрузке остатков в новую базу. Это отдельный проект, который нужно согласовать с бухгалтерией и аудитом.
Если не помогло
Когда вы прошли все шаги, а эффекта нет, сделайте вот что:
- Снова снимите замеры и сравните с исходными. Возможно, вы улучшили одну операцию, а жалобы про другую.
- Проверьте, не стал ли узким местом диск или сеть: нагрузка на них часто маскируется под «медленную 1С».
- Воспроизведите проблему на копии базы на отдельном сервере. Если там быстро, причина в окружении рабочей среды; если медленно, в данных или коде.
- Привлеките специалиста по технологическому журналу и планам запросов. Это узкая компетенция, и час работы специалиста дешевле месяцев экспериментов.