Почему 1С тормозит и что с этим делать: от замера до правки кода

· 11 мин

Содержание

Ускорить работу 1С можно только одним способом: сначала найти, где именно теряется время, и чинить это место. Если тормозит одна операция (проведение реализации, отчёт), включите Отладка → Замер производительности в Конфигураторе и посмотрите, какая строка кода съедает время. Если медленно всё и у всех — проверяйте диск, память сервера, обслуживание СУБД и блокировки.

Оптимизация программы 1С обычно идёт в таком порядке: диагностика → база данных и индексы → сервер 1С и кластер → рабочие места пользователей → регламентное обслуживание → код конфигурации. Каждый следующий шаг дороже предыдущего. Покупать новый сервер до диагностики — частая и дорогая ошибка.

Сначала замер: как понять, что именно тормозит в 1С

Жалоба «1С тормозит» ничего не говорит. Перед любыми настройками ответьте на три вопроса.

  • 🕐 Когда. Всегда, в определённые часы (закрытие месяца , утро понедельника) или после обновления?
  • 👥 У кого. У всех пользователей, у одного отдела, на одном компьютере?
  • 📄 Что именно. Открытие базы, проведение документа, формирование отчёта, запись справочника?

Ответы сразу сужают поиск. Медленно у одного человека — смотрите его компьютер и сеть. Медленно у всех в 10 утра — блокировки или фоновые задания. Медленно только одно действие — код или запрос.

Инструменты платформы для диагностики

ИнструментЧто показываетКогда применять
Замер производительности (Конфигуратор)Время и число вызовов по строкам кодаТормозит конкретная операция
Технологический журналДолгие запросы к СУБД, ожидания на блокировках, взаимоблокировкиМедленно у многих, есть подозрение на блокировки
Консоль кластераСеансы, рабочие процессы, занятая памятьСервер «задыхается», процесс rphost растёт
Монитор ресурсов WindowsЗагрузка диска, процессора, памяти и сетиПервая проверка железа
Журнал регистрацииОшибки и длительные транзакции по времениРазбор ситуаций задним числом

Замер в Конфигураторе: запустите отладку (F5), в Конфигураторе выберите Отладка → Замер производительности, выполните медленное действие в пользовательском режиме и остановите замер. Отсортируйте по колонке процента времени. Обычно 1–3 строки дают 80% задержки.

Технологический журнал: настройка за пять минут

Журнал включается файлом logcfg.xml в каталоге conf платформы, например C:\Program Files\1cv8\conf\. Пример, который ловит запросы дольше секунды и все проблемы с блокировками:

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\techlog" history="24">
    <event>
      <eq property="name" value="DBMSSQL"/>
      <ge property="duration" value="1000000"/>
    </event>
    <event>
      <eq property="name" value="TTIMEOUT"/>
    </event>
    <event>
      <eq property="name" value="TDEADLOCK"/>
    </event>
    <property name="all"/>
  </log>
</config>

Для PostgreSQL замените DBMSSQL на DBPOSTGRS. В актуальных версиях платформы длительность пишется в микросекундах, поэтому 1000000 — это одна секунда.

Журнал растёт очень быстро. Выносите его на отдельный диск, ставьте history на сутки-двое и удаляйте logcfg.xml после сбора данных. Забытый техжурнал сам становится причиной тормозов.

Ускорение 1С на уровне СУБД: индексы, статистика, память

В клиент-серверном варианте большую часть времени работы 1С съедает СУБД. Запущенная база без обслуживания со временем замедляется в разы, хотя код не менялся.

MS SQL Server

  1. Ограничьте память. В свойствах сервера задайте max server memory. Если 1С и SQL на одной машине, оставьте операционной системе и рабочим процессам 1С не меньше трети памяти.
  2. Настройте план обслуживания. Ежедневно — обновление статистики, еженедельно — перестроение или реорганизация индексов. Запускайте ночью, когда в базе нет пользователей.
  3. Вынесите tempdb на быстрый диск. 1С активно пишет временные таблицы. Несколько файлов tempdb одинакового размера снимают конкуренцию за них.
  4. Разнесите данные и журнал транзакций по разным дискам, если это возможно.

Быстрое обновление статистики по всей базе вручную:

USE [имя_базы];
EXEC sp_updatestats;

PostgreSQL

  • 🧠 shared_buffers — обычно около 25% оперативной памяти сервера.
  • 📊 effective_cache_size — около 50–75% памяти: подсказка планировщику, сколько данных лежит в кэше ОС.
  • 🔧 work_mem — память на сортировку для одной операции. Большое значение при многих пользователях быстро съедает RAM, поднимайте осторожно.
  • 🧹 Autovacuum не отключайте. Раз в неделю полезен ручной проход:
VACUUM ANALYZE;

Используйте сборку PostgreSQL, рекомендованную для 1С: в ней есть доработки под запросы платформы.

Файловая база

У файловой базы нет СУБД, которую можно настроить. Здесь работают три вещи: быстрый SSD, отсутствие антивирусной проверки файла 1Cv8.1CD и периодическое тестирование с реиндексацией (о нём ниже). Если пользователей больше 5–7 или база перевалила за несколько гигабайт, честный ответ — переходить на клиент-серверный вариант.

Настройка сервера 1С и кластера для быстрой работы

Сервер приложений редко бывает главной причиной тормозов, но неудачные настройки дают заметные провалы.

Что проверить в первую очередь

  1. Схема электропитания Windows — «Высокая производительность». В режиме «Сбалансированный» процессор сбрасывает частоту, и короткие запросы 1С выполняются медленнее.
  2. Исключения антивируса — каталог данных кластера (srvinfo), каталог с базами, временные файлы. Сканирование каждого обращения к файлам кластера заметно замедляет работу.
  3. Диск под srvinfo — SSD. Там лежат журналы регистрации и сеансовые данные.
  4. Сеть между сервером 1С и СУБД — минимальная задержка. Лучше всего оба на одной машине или в одной стойке.

Параметры рабочего сервера

Они задаются в консоли кластера, в свойствах рабочего сервера:

  • Количество ИБ на процесс и Количество соединений на процесс — регулируют, сколько баз и пользователей обслуживает один rphost. При большом числе пользователей значение 0 (без ограничения) лучше заменить конкретным числом, чтобы нагрузка распределялась по процессам.
  • Безопасный расход памяти за один вызов — защищает сервер от одного тяжёлого отчёта, который съест всю RAM.
  • Диапазон портов рабочих процессов — проверьте, что он открыт в брандмауэре, иначе соединения будут подвисать.

Клиент сначала обращается к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и рабочим процессам. Если открыт только 1540, вход в базу будет долгим или оборвётся.

Перезапуск службы «Агент сервера 1С:Предприятия» или принудительное завершение рабочего процесса обрывает сеансы всех пользователей без сохранения данных. Делайте это вне рабочего времени и предупреждайте людей заранее.

Режим блокировок

Если в техжурнале много событий TTIMEOUT, пользователи ждут друг друга. В конфигурации свойство «Режим управления блокировкой данных» должно стоять «Управляемый». Типовые конфигурации на 8.3 уже работают в управляемом режиме. Автоматический режим встречается в старых или сильно доработанных базах и при 20+ пользователях становится узким местом.

Рабочие места: почему 1С тормозит у одного пользователя

Если медленно на одном компьютере, а у коллег всё нормально, проблема почти всегда локальная.

  • 🧽 Кэш платформы. Добавьте параметр /ClearCache в дополнительные параметры запуска базы (окно выбора базы → Изменить → последняя страница) или удалите папки с длинными именами из %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8 при закрытой 1С.
  • 💻 Тип клиента. Тонкий клиент передаёт по сети меньше данных, чем толстый. Для удалённых офисов подходит веб-клиент или тонкий клиент через публикацию на веб-сервере.
  • 📶 Сеть. Файловая база через Wi-Fi или VPN работает на порядок медленнее, чем по кабелю. Для удалённой работы используют терминальный сервер или публикацию базы.
  • 🛡 Антивирус на клиенте. Исключите каталог кэша 1С и каталог базы, если она файловая.
  • 🧩 Версия платформы. На клиенте должна стоять та же версия, что и на сервере. Иначе при каждом входе возможны долгие проверки и обновление клиента.

Тяжёлые настройки пользователя

Иногда тормозит только одна форма у одного человека. Причина — сохранённые настройки: отбор без индекса, отключённый период, десяток лишних колонок. В БП 3.0 и ЗУП 3.1 настройки пользователя сбрасывают в разделе Администрирование → Настройки пользователей и прав → Персональные настройки пользователей, там же можно скопировать их у коллеги, у которого всё работает быстро.

Где тормозит 1С в вашем случае?

Регламентное обслуживание базы, которое реально ускоряет 1С

Большая часть замедлений накапливается постепенно. Регулярное обслуживание держит базу в форме.

Тестирование и исправление

Путь: Конфигуратор → Администрирование → Тестирование и исправление. Для ускорения полезны флажки «Реиндексация таблиц информационной базы» и «Сжатие таблиц информационной базы». Для файловой базы это главный способ вернуть скорость.

Перед тестированием и исправлением сделайте резервную копию базы — режим меняет данные, и прерванная операция может её повредить. Нужен монопольный доступ: пользователи должны выйти.

Итоги регистров

Если отчёты и проведение замедлились без видимых причин, проверьте итоги. В пользовательском режиме откройте Главное меню → Функции для технического специалиста → Стандартные → Управление итогами (пункт включается в параметрах программы). Там можно установить период рассчитанных итогов на начало текущего месяца и пересчитать итоги .

Чистка и фоновые задания

  • 🗑 Удаление помеченных объектов — в разделе Администрирование → Обслуживание. Тысячи помеченных документов увеличивают таблицы и мешают запросам.
  • 📜 Журнал регистрации. В Конфигураторе: Администрирование → Настройка журнала регистрации. Уровень «Ошибки» вместо «Все события» и разбиение журнала по периодам снижают нагрузку на диск.
  • ⏱ Регламентные задания — Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Проверьте, не запускаются ли тяжёлые задачи (полнотекстовый индекс, загрузка курсов, обмены) в рабочие часы каждые несколько минут.
  • 🔍 Полнотекстовый поиск. Если он не нужен, отключите. Если нужен — переведите обновление индекса на ночь.
  • 📦 Свёртка базы — для баз за много лет. Это серьёзная операция: делайте её на копии, проверяйте отчётность и только потом переносите результат.

Распределённая база (РИБ) и обмены

В РИБ и при обмене через планы обмена тормоза часто вызывает разросшаяся регистрация изменений. Если узел давно не синхронизировался, по нему копятся сотни тысяч записей. Что помогает:

  1. Синхронизировать узлы регулярно, не реже раза в день.
  2. Удалить из плана обмена узлы, которые больше не используются: регистрация по ним продолжает копиться.
  3. Не ставить обмены каждые 1–2 минуты в рабочее время без необходимости.
  4. Для больших объёмов увеличить интервал и обменивать данные пакетами ночью.
Ежемесячное обслуживание 1С
Выполнено: 0 / 7

Код и запросы: что замедляет доработанную конфигурацию

Если база доработана, а замер показывает, что время уходит в код, ищите типовые антипаттерны. Ниже — то, что встречается в доработках постоянно.

Запрос в цикле

Самая частая причина. Для каждой строки табличной части выполняется отдельный запрос к базе. При 500 строках это 500 обращений к СУБД вместо одного. Правильно — собрать все ссылки в массив или временную таблицу и получить данные одним запросом.

// Медленно: обращение к базе на каждой итерации
Для Каждого Строка Из Товары Цикл
    Вес = Строка.Номенклатура.Вес;
КонецЦикла;

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

Другие частые ошибки в запросах

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

Ошибки клиент-серверного взаимодействия

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

Не правьте типовую конфигурацию напрямую ради ускорения. Доработки выносите в расширение: так обновления пройдут без ручного сравнения и объединения.

Железо: когда оптимизация уже не поможет

Если обслуживание сделано, код чистый, а в мониторе ресурсов постоянно высокая очередь к диску или свободной памяти почти нет, упираетесь в железо. Порядок вложений по отдаче:

  1. SSD под базу данных и tempdb — самый заметный эффект.
  2. Оперативная память — чтобы рабочая часть базы помещалась в кэш СУБД.
  3. Процессор с высокой частотой на ядро. Платформа выполняет один вызов в одном потоке, поэтому частота важнее числа ядер.

Ориентир для клиент-серверной базы на 20–30 пользователей — 8 ядер, 32 ГБ памяти и NVMe-диски. Это стартовая точка для планирования, а не норматив: реальную потребность покажут замеры.

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

Поможет ли переход с файловой базы на SQL, если работает 2–3 человека?
Обычно нет. На маленькой базе с парой пользователей файловый вариант на SSD работает не медленнее, а иногда и быстрее. Переходить стоит при росте числа пользователей и размера базы.
Что такое тест Гилёва и можно ли ему верить?
Это популярная обработка, которая измеряет скорость однопоточных операций платформы в «условных попугаях». Она удобна для сравнения двух серверов или настроек до и после, но не показывает, почему тормозит именно ваша база.
Почему 1С стала медленнее после обновления платформы?
Новая версия может иначе строить запросы. Обновите статистику СУБД, очистите кэш на клиентах и проверьте, что на всех компьютерах стоит та же версия, что и на сервере.
Ускоряет ли работу 1С отключение журнала регистрации?
Немного, но отключать его полностью не стоит: без журнала невозможно разобрать, кто и когда изменил данные. Разумный компромисс — уровень «Ошибки» и хранение по периодам.
Сколько оперативной памяти нужно серверу 1С?
Зависит от числа пользователей и размера базы. Для небольшой компании хватает 16–32 ГБ на сервер с 1С и СУБД. Признак нехватки — постоянный обмен с файлом подкачки и почти нулевая свободная память в мониторе ресурсов.