Работа с файловыми базами данных 1С:Предприятие объемом более 2–3 Гб часто преподносит неприятные сюрпризы системным администраторам и программистам. Одной из наиболее распространенных и критических проблем является блокировка таблиц при попытке проведения документов. Пользователи начинают жаловаться на регулярные сообщения вида «Не удалось заблокировать таблицу _INFORG15325» или аналогичные ошибки, связанные с системными таблицами.
В этой статье мы подробно разберем, почему возникают подобные сбои, как правильно проанализировать технологический журнал 1С, расшифровать имена «загадочных» таблиц, а также рассмотрим пошаговые методы лечения базы данных и способы облегчения жизни пользователям без дорогостоящего перехода на клиент-серверный вариант (MS SQL / PostgreSQL).
Когда платформа выдает ошибку с загадочным именем вроде _INFORG15325, администраторы часто пытаются найти эту таблицу внешними утилитами, но не всегда преуспевают. В СУБД или внутреннем файле базы данных 1Cv8.1CD все объекты конфигурации (справочники, документы, регистры) хранятся под физическими именами, которые формирует сама платформа.
Чтобы сопоставить физическое имя таблицы с привычным объектом метаданных в конфигураторе, мы можем использовать встроенный программный метод платформы. Рассмотрим пример кода, который поможет нам быстро определить «виновника» блокировки. Этот код можно запустить в любой внешней обработке или через консоль кода:
СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураБазы Цикл
Если Таблица.ИмяТаблицыХранения = "_INFORG15325" Тогда
Сообщить("Имя таблицы в конфигурации: " + Таблица.ИмяТаблицы);
Сообщить("Метаданные: " + Таблица.Метаданные);
Прервать;
КонецЕсли;
КонецЦикла;
В большинстве типовых конфигураций, таких как «Управление торговлей 11» (УТ 11), таблица _INFORG15325 (или аналогичные индексы _INFORG) соответствует регистру сведений РегистрСведений.ВерсииОбъектов. Этот регистр отвечает за хранение истории изменений (версионирование) документов и справочников. При каждом проведении или записи любого документа система пытается сделать запись в эту таблицу. Если в базе одновременно работают несколько пользователей, возникает жесткая конкуренция за доступ к этому регистру.
Как показывает практика, простое отключение версионирования объектов в настройках программы лишь временно маскирует симптомы. Ошибка блокировки начинает ссылаться на другую таблицу — например, на системную таблицу DATAZONEOBJECTLOCKS. Давайте разберем, почему это происходит.
В файловом режиме работы 1С применяется блокировка на уровне всей таблицы. В отличие от полноценных СУБД (где блокируются отдельные строки), файловый движок при любой транзакции (записи документа) временно захватывает всю таблицу целиком. Таблица DATAZONEOBJECTLOCKS используется Библиотекой стандартных подсистем (БСП) для контроля объектных блокировок. Когда один пользователь проводит документ, платформа блокирует эту системную таблицу. Любая другая попытка записи от второго пользователя в этот же момент времени натыкается на блокировку всей таблицы, вызывая сбой интерфейса.
Таким образом, корень проблемы кроется не в конкретном регистре сведений, а в механизме работы файловой СУБД при увеличивающемся объеме данных и количестве активных пользователей.
Для детальной диагностики настроим Технологический журнал (ТЖ) 1С. При анализе логов ТЖ во время возникновения ошибки проведения мы можем столкнуться со следующими строками исключений (EXCP):
EXCP,1,process=1cv8,Usr=Юзер,Exception=9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3,
Descr="src\ClientFileCacheImpl.cpp(276): 9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3:
Файл не обнаружен 'v8stg64://c:/3/DynamicalWorkCache': src\Storage64.cpp(3116)"
Эта ошибка указывает на повреждение локального кэша динамического обновления конфигурации. Динамическое обновление (обновление базы «на лету», когда в ней работают пользователи) — злейший враг файловых баз данных. Оно приводит к рассинхронизации локальных кэшей пользователей и структуры таблиц в файле 1Cv8.1CD. База начинает «сходить с ума», хаотично блокируя таблицы транзакций.
Вторая характерная ошибка в логах:
EXCP,1,process=1cv8,Usr=Юзер,Exception=DatabaseException8,
Descr="Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи)
не выполнено 'DATAZONEOBJECTLOCKS'"
Это прямое следствие затянувшихся транзакций и сетевых задержек при обращении к общему файлу базы по сети.
Рассмотрим последовательность действий, которая поможет полностью очистить базу от накопившихся ошибок и оптимизировать ее работу для пользователей.
Если в базе накопились ошибки кэша конфигурации, стандартное «Тестирование и исправление» (ТиИ) может не помочь. Нам необходимо полностью пересобрать структуру базы данных. Выполним следующие шаги:
.dt..dt.Этот несложный цикл полностью пересоздает физическую структуру таблиц файла базы данных, очищает скрытый конфигурационный мусор и перестраивает все индексы.
При аварийных завершениях работы 1С (выключение компьютера пользователя, сбои Wi-Fi/сетевого кабеля) в каталоге базы данных остаются «зависшие» маркеры блокировок. Выполним ручную очистку:
1Cv8.1CD.1Cv8.1CD трогать нельзя — это сама база.*.1CL, *.1CD.cfl, *.1CL.cfl, а также временным папкам удаленного доступа.Эти файлы создаются платформой динамически для фиксации активных сессий и транзакций. Их очистка исключает ложные «фантомные» блокировки.
Для поиска физических повреждений файловой структуры базы воспользуемся штатной утилитой проверки:
C:\Program Files\1cv8\номер_версии\bin\).chdbfl.exe.1Cv8.1CD.Если база весит около 3 Гб и с ней одновременно работают более 3–5 пользователей, даже самые чистые индексы со временем начнут давать сбои из-за ограничений сетевого протокола Windows. Сетевой протокол SMB, используемый для работы с «расшаренными» папками, накладывает огромные задержки на транзакции файловой базы. Разберем архитектурные решения, которые позволят раз и навсегда забыть об этой проблеме.
Это самый эффективный, быстрый и абсолютно бесплатный способ оптимизации. Вместо того чтобы открывать файл базы напрямую по сети через общий доступ Windows, мы настроим локальный веб-сервер:
При такой схеме работы пользователи подключаются через Тонкий клиент. Все обращения к файлу базы данных 1Cv8.1CD происходят строго локально на самом веб-сервере силами одного процесса. Сетевой трафик минимизируется, транзакции выполняются мгновенно, а ошибки блокировок таблиц исчезают практически полностью.
Файловая база крайне чувствительна к скорости дисковых операций чтения и записи. Если в момент проведения документа локальный антивирус на сервере или на рабочей станции пользователя решает проверить изменившийся файл базы, это гарантированно приведет к ошибке блокировки для всех остальных участников сети.
Для предотвращения подобных ситуаций выполним следующие настройки:
*.1CD, *.1CL в белый список (исключения) антивируса на всех ПК.Применяя данные методы комплексно, мы сможем восстановить стабильную работоспособность файловой базы данных, устранить зависания транзакций и обеспечить комфортную и быструю работу пользователей.