Что лежит внутри информационной базы 1С и почему она тормозит

· 10 мин

Содержание

База данных 1С 8.3 бывает двух видов. Файловая — это один файл 1Cv8.1CD в каталоге базы, с которым работает сама платформа. Клиент-серверная — это набор таблиц в СУБД (MS SQL Server, PostgreSQL, IBM Db2 или Oracle), а между пользователями и СУБД стоит кластер серверов 1С.

От этого выбора зависит почти всё: сколько людей могут работать одновременно, как делать резервные копии, где искать причину «зависаний» и что вообще можно оптимизировать. Ниже разбор устройства базы 1С по слоям, от файла на диске до транзакций, и практические шаги для администратора и разработчика.

Файловая база 1С: что хранится в 1Cv8.1CD

В файловом варианте вся информационная база — данные, конфигурация, служебные сведения — лежит в одном файле 1Cv8.1CD. Внутри он устроен как маленькая СУБД: страницы фиксированного размера, таблицы, индексы. Читает и пишет этот файл сама платформа, отдельный сервер не нужен.

Что ещё бывает в каталоге базы:

  • 📄 1Cv8.1CD — сама база, единственный файл, который критично беречь;
  • 🔒 служебные файлы блокировок и временные файлы — создаются при работе и удаляются, когда все вышли;
  • 📁 подкаталоги с журналом регистрации (1Cv8Log) — история действий пользователей.

Формат файла и размер страницы

В платформе 8.3 появился новый формат файловой базы (режим совместимости формата 8.3.8 и выше). Он позволяет выбрать размер страницы — от 4 до 64 КБ — и снимает ограничение старого формата в 4 ГБ на одну таблицу. Формат выбирают при создании базы, а сменить его у существующей можно выгрузкой в .dt и загрузкой в новую базу.

Чем ограничен файловый вариант

Файловая база хороша для одного-нескольких пользователей и небольших объёмов. Узкие места:

  • 🐢 все пользователи по сети читают один файл, и блокировки ставятся на уровне целых таблиц;
  • 🌐 работа по общей папке через медленную сеть или VPN резко замедляет базу и повышает риск повреждения;
  • 💾 при обрыве записи (выключили питание, упала сеть) файл может повредиться.

Если файловую базу открывают по сети несколько человек, опубликуйте её на веб-сервере и подключайтесь через тонкий клиент по HTTP. Тогда файл читает только веб-сервер, а не каждый компьютер по SMB.

Для проверки файла есть утилита chdbfl.exe в каталоге bin платформы. Она проверяет физическую целостность 1Cv8.1CD и может исправить найденные ошибки. Запускать её можно только когда все пользователи вышли из базы.

Клиент-серверная база 1С и связка с SQL

В клиент-серверном варианте данные хранит СУБД, а логику исполняет кластер серверов 1С. Клиент никогда не подключается к SQL напрямую.

Цепочка подключения такая:

  1. Клиент обращается к агенту сервера 1С (ragent, порт 1540).
  2. Агент передаёт его менеджеру кластера (rmngr, порт 1541).
  3. Менеджер назначает рабочий процесс (rphost) из диапазона портов, заданного в свойствах рабочего сервера (по умолчанию 1560–1591).
  4. Рабочий процесс выполняет код и запросы 1С, переводит их в SQL и отправляет в СУБД.

Поэтому запрос на встроенном языке ВЫБРАТЬ ... ИЗ Справочник.Номенклатура превращается в обращение к таблице вида _Reference45. Язык запросов 1С — это надстройка, которую платформа транслирует в диалект конкретной СУБД.

Файловая или клиент-серверная: сравнение

КритерийФайловаяКлиент-серверная
Где данныеодин файл 1Cv8.1CDтаблицы в СУБД
Нужен сервер 1Снетда, кластер серверов
Одновременная работанесколько человекдесятки и сотни
Блокировкина уровне таблицна уровне записей (управляемые)
Резервное копированиекопия файла или .dtсредства СУБД + .dt
Обслуживание«Тестирование и исправление»индексы, статистика, план обслуживания СУБД
Стоимостьтолько лицензии клиентовплюс лицензия сервера 1С и, возможно, СУБД
Какой вариант базы вам подходит?

Таблицы и индексы базы данных 1С

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

Объект конфигурацииПрефикс таблицыЧто там лежит
Справочник_Referenceэлементы и группы
Документ_Documentшапки документов
Табличная часть_Reference..._VT, _Document..._VTстроки табличных частей
Регистр сведений_InfoRgзаписи регистра
Регистр накопления_AccumRg (движения), _AccumRgT (итоги)движения и остатки
Регистр бухгалтерии_AccRg и связанные таблицы итоговпроводки и обороты
План видов характеристик_Chrcвиды характеристик
Константа_Constзначения констант
Перечисление_Enumзначения перечислений

Почти у каждой таблицы объекта есть стандартные поля: _IDRRef — уникальная ссылка (16-байтный идентификатор), _Version — версия записи, _Marked — пометка удаления. У документов добавляются _Date_Time, _Number, _Posted.

Служебные таблицы

Кроме данных пользователей, в базе есть таблицы самой платформы:

  • ⚙️ Config — текущая конфигурация базы данных;
  • 📝 ConfigSave — конфигурация, которую открыли и редактируют в Конфигураторе, но ещё не применили;
  • 🗂 Params — параметры базы, в том числе список пользователей;
  • 🧩 DBSchema — описание соответствия объектов 1С и таблиц СУБД.

Никогда не меняйте эти таблицы и данные 1С напрямую через SQL. Платформа ведёт собственные связи, версии и итоги. Правка в обход неё ломает целостность так, что «Тестирование и исправление» не всегда вытащит базу обратно.

Как узнать имя таблицы для объекта

Соответствие объектов и таблиц возвращает метод встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). Его удобно вызвать в консоли кода или внешней обработке и вывести результат в таблицу значений. Это нужно, когда в мониторинге СУБД видно тяжёлый запрос к _AccumRg1234, а надо понять, какой это регистр.

Индексы

Платформа сама создаёт индексы по ссылке, коду, наименованию, дате и номеру, по измерениям регистров. Разработчик может добавить свой индекс через свойство реквизита Индексировать — значения Индексировать или Индексировать с доп. упорядочиванием.

Индекс ускоряет отбор по реквизиту, но замедляет запись и раздувает базу. Ставить его стоит на реквизиты, по которым реально часто отбирают в запросах, а не «на всякий случай».

Транзакции и блокировки: откуда берутся «зависания» 1С

Проведение документа — это транзакция: запись шапки, табличной части и движений по регистрам выполняется целиком или откатывается целиком. Чтобы два пользователя не испортили одни и те же остатки, СУБД и платформа ставят блокировки.

Автоматический и управляемый режим

У конфигурации есть свойство «Режим управления блокировкой данных»:

  • 🔐 Автоматический — блокировки ставит СУБД. На MS SQL это часто приводит к блокировке лишнего: целых диапазонов или таблиц.
  • 🎯 Управляемый — блокировки ставит менеджер блокировок 1С по конкретным данным, которые описал разработчик через объект БлокировкаДанных. Конкурентная работа заметно лучше.
  • 🔀 Автоматический и управляемый — переходный режим, задаётся отдельно у объектов.

Современные типовые конфигурации работают в управляемом режиме.

Типичные сообщения при конфликтах

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

Частые причины:

  • 🐌 долгая транзакция: тяжёлый документ, проведение с перепроведением или обмен, который держит данные минутами;
  • 📦 групповое перепроведение в рабочее время;
  • 🔁 регламентное задание или обмен, работающие с теми же регистрами, что и пользователи;
  • 🧱 чтение данных без предварительной блокировки и попытка записи следом — классический путь к взаимоблокировке.

Как найти виновника

Для расследования включают технологический журнал — файл logcfg.xml в каталоге conf платформы, события TLOCK, TTIMEOUT, TDEADLOCK. Журнал показывает, кто держал блокировку, на какой таблице и в каком контексте кода.

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

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

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

Обслуживание базы

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

MS SQL Server. Настройте план обслуживания:

  1. Перестроение или реорганизация индексов — раз в неделю ночью.
  2. Обновление статистики — ежедневно.
  3. Очистка процедурного кэша после обновления статистики, чтобы СУБД пересобрала планы.
-- обновление статистики по всей базе (запускать ночью)
USE [buh_base];
EXEC sp_updatestats;
DBCC FREEPROCCACHE;

PostgreSQL. Включите автоочистку (autovacuum) и регулярно выполняйте анализ:

VACUUM ANALYZE;

Запросы и код

Типовые ошибки, из-за которых база «ложится» на ровном месте:

  • 🔄 запрос внутри цикла по строкам — вместо одного пакетного запроса;
  • 🔗 обращение «через точку» к реквизитам ссылок в цикле: каждое обращение — отдельное чтение из базы;
  • 📊 условия на виртуальные таблицы в ГДЕ вместо параметров виртуальной таблицы — СУБД сначала считает всё, потом фильтрует;
  • 🧬 обращение к полям составного типа без ВЫРАЗИТЬ — платформа соединяет таблицы всех возможных типов.

Найти тяжёлые места помогает замер производительности в Конфигураторе (Отладка → Замер производительности) и технологический журнал с событиями DBMSSQL/DBPOSTGRS.

Железо

  • 💽 SSD/NVMe под файлы базы, логи транзакций и tempdb — самое заметное ускорение;
  • 🧠 оперативная память для СУБД — чтобы рабочие данные помещались в кэш;
  • ⚡ высокая частота процессора на сервере 1С важнее числа ядер: код одного сеанса исполняется в одном потоке.

Резервное копирование и восстановление базы 1С

Способ резервного копирования зависит от варианта базы.

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

Выгрузка .dt делается в Конфигураторе: Администрирование → Выгрузить информационную базу, загрузка — там же, Загрузить информационную базу. Загрузка .dt полностью заменяет данные в базе, куда загружаете. Загружайте копию в новую пустую базу, если хотите сначала проверить её.

Для MS SQL удобна модель восстановления Full: полная копия раз в сутки и копии журнала транзакций каждые 15–60 минут. Тогда базу можно откатить на момент перед ошибкой, а не на прошлую ночь. Для PostgreSQL базовый вариант — ежедневный pg_dump.

:: копия файловой базы в архив с датой (запускать, когда пользователи вышли)
set SRC=D:\Bases\Buh
set DST=E:\Backup\Buh_%date:~6,4%%date:~3,2%%date:~0,2%.zip
powershell Compress-Archive -Path "%SRC%\1Cv8.1CD" -DestinationPath "%DST%"

Копия, которую ни разу не разворачивали, — не копия. Раз в месяц восстанавливайте её в тестовую базу и открывайте пару отчётов.

Большие базы 1С: что меняется после десятков гигабайт

Когда база перерастает 50–100 ГБ, обычные приёмы перестают работать: .dt выгружается часами, отчёты за год считаются минутами, обновление конфигурации растягивается на ночь.

Что помогает:

  • 📉 Итоги регистров. Проверьте, что итоги включены и рассчитаны: Все функции → Стандартные → Управление итогами. Для активно используемых регистров включайте разделение итогов — оно снижает конкуренцию за таблицу итогов при одновременном проведении.
  • 🗜 Свёртка базы. Старые периоды сворачивают в остатки на дату. В типовых конфигурациях для этого есть отдельная обработка свёртки; запускайте её на копии и сравнивайте отчёты до и после.
  • 🧹 Чистка служебных данных. Разрастаются журнал регистрации, версии объектов, история изменений и присоединённые файлы. Ограничьте хранение версий и вынесите файлы из базы в тома на диске.
  • 🕒 Регламентные задания и обмены. Тяжёлые операции — на ночь, отдельно от рабочего времени пользователей.
  • 🗄 Раздельные диски. Файлы данных, журнал транзакций и tempdb — на разных физических томах.

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

Частые вопросы о базах данных 1С

Можно ли перевести файловую базу 1С на SQL без потери данных?
Да. Выгрузите базу в .dt, создайте на кластере серверов новую базу на нужной СУБД и загрузите в неё файл. Данные, пользователи и конфигурация переносятся целиком.
Почему файл 1Cv8.1CD не уменьшается после удаления документов?
Удалённые записи освобождают страницы внутри файла, но сам файл не сжимается. Уменьшить его помогает «Сжатие таблиц информационной базы» в режиме тестирования и исправления или выгрузка-загрузка .dt.
Можно ли читать данные 1С прямыми SQL-запросами для отчётов?
Читать технически можно, но имена таблиц меняются после реструктуризации, а лицензионное соглашение 1С ограничивает прямой доступ к данным. Безопаснее получать данные через HTTP-сервисы, OData или внешние отчёты.
Где хранится конфигурация — в базе или отдельно?
В самой базе: в служебной таблице Config для файлового и клиент-серверного варианта. Отдельно её сохраняют в файл .cf через Конфигуратор.
Какая СУБД лучше для 1С — MS SQL или PostgreSQL?
Обе поддерживаются платформой. MS SQL проще в администрировании для Windows-инфраструктуры, PostgreSQL не требует платной лицензии. Для PostgreSQL используйте сборки, адаптированные для 1С.