Что лежит внутри информационной базы 1С и почему она тормозит
Содержание
База данных 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С (
ragent, порт1540). - Агент передаёт его менеджеру кластера (
rmngr, порт1541). - Менеджер назначает рабочий процесс (
rphost) из диапазона портов, заданного в свойствах рабочего сервера (по умолчанию1560–1591). - Рабочий процесс выполняет код и запросы 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. Настройте план обслуживания:
- Перестроение или реорганизация индексов — раз в неделю ночью.
- Обновление статистики — ежедневно.
- Очистка процедурного кэша после обновления статистики, чтобы СУБД пересобрала планы.
-- обновление статистики по всей базе (запускать ночью)
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-запросами для отчётов?
Где хранится конфигурация — в базе или отдельно?
Config для файлового и клиент-серверного варианта. Отдельно её сохраняют в файл .cf через Конфигуратор.