При одновременной работе нескольких пользователей в файловой информационной базе 1С (файл 1Cv8.1CD), особенно на терминальном сервере, нередко возникают резкие замедления работы и взаимные блокировки. Разберем причины возникновения таких проблем, способы их детальной диагностики с помощью Технологического журнала и системных утилит, а также варианты оптимизации инфраструктуры.
Причины возникновения блокировок в файловом режиме
Файловый режим работы 1С имеет фундаментальные архитектурные ограничения, о которых важно помнить:
Табличный уровень блокировок. В отличие от клиент-серверного режима (SQL), где работают точечные построчные управляемые блокировки, в файловой базе при записи блокируются целиком таблицы или смежные области файла базы данных. Любая длительная транзакция (проведение объемного документа, групповое перепроведение, закрытие месяца) выстраивает остальные сеансы в очередь ожидания.
Количество пользователей. Файловая база оптимально рассчитана на работу 3–5 активных пользователей. При увеличении числа работающих до 8–10 человек вероятность конфликтов параллельных транзакций на запись возрастает многократно.
Фоновые и регламентные задания. Автоматический пересчет итогов, слияние индексов полнотекстового поиска или загрузка классификаторов в файловом режиме выполняются внутри одного из клиентских сеансов, блокируя доступ к общим данным.
Дисковая подсистема и антивирусное ПО. Сканирование файла 1Cv8.1CD антивирусом в режиме реального времени при каждой транзакции многократно увеличивает время удержания файловых дескрипторов.
Диагностика с помощью Технологического журнала (ТЖ)
Выясним, как настроить встроенный механизм сбора событий платформы — Технологический журнал. Поскольку все пользователи работают на одном терминальном сервере, журнал настраивается один раз для всей платформы.
Разберем по шагам порядок настройки:
Перейдем в каталог конфигурационных файлов платформы 1С. По умолчанию для 64-разрядной версии Windows это: C:\Program Files\1cv8\conf (или C:\Program Files (x86)\1cv8\conf для 32-разрядной версии).
Создадим в этом каталоге файл с именем logcfg.xml в кодировке UTF-8.
Настроим сбор событий ожидания и взаимных блокировок. Посмотрим на пример содержимого конфигурационного файла:
Проанализируем ключевые события, которые собираются этим журналом:
TLOCK — фиксирует факт установки блокировки на ресурс, длительность ожидания и системный идентификатор процесса (p:processName, t:clientID).
TTIMEOUT — показывает ситуации, когда сеанс пользователя превысил максимальное время ожидания освобождения заблокированного ресурса и завершился ошибкой.
TDEADLOCK — регистрирует возникновение тупиковых взаимоблокировок, когда два или более процессов заблокировали ресурсы и ожидают освобождения данных друг от друга.
EXCP — записывает системные исключения и критические ошибки базы данных.
Важно: Убедимся, что у учетных записей пользователей терминального сервера есть полные права на запись в каталог логов (в нашем примере: C:\1C_Logs\Locks).
Анализ процессов через системный мониторинг
Параллельно со сбором логов платформы рассмотрим системные способы отслеживания «зависших» сеансов на терминальном сервере:
Монитор ресурсов и Process Explorer. Откроем утилиту Process Explorer от Sysinternals. Найдем все запущенные процессы 1cv8.exe, отсортируем их по нагрузке на процессор (CPU) и активности диска (Disk Read/Write). Идентификатор процесса (PID), создающий максимальную очередь дисковых операций или нагружающий ядро процессора на 100%, указывает на сеанс виновника блокировки.
Поиск открытых дескрипторов. В утилите Process Explorer воспользуемся сочетанием клавиш Ctrl + F и введем имя файла базы 1Cv8.1CD. Это позволит увидеть, какие именно процессы удерживают активные блокировки на уровне операционной системы.
Журнал регистрации 1С. Сопоставим время возникновения пиковой нагрузки с событиями в журнале регистрации платформы. Обратим внимание на длительные транзакции, выполнение регламентных заданий или массовое проведение документов конкретным пользователем.
Методы устранения проблем и оптимизация работы
После выявления источников конфликтов реализуем комплекс мер по оптимизации:
Перевод базы на клиент-серверный вариант (SQL). Это наиболее надежное и фундаментальное решение для коллектива от 8–10 пользователей. Сервер «1С:Предприятие» в связке с MS SQL Server или PostgreSQL обеспечивает работу управляемых блокировок на уровне отдельных записей, изолирует транзакции и исключает блокировку всей таблицы.
Публикация базы на веб-сервере. Если переход на SQL пока невозможен, настроим публикацию файловой базы на веб-сервере (IIS или Apache) и переведем пользователей на работу через тонкий клиент или браузер. В этом случае обращения к файлу базы централизуются пулом процессов веб-сервера, что снижает хаотичную файловую конкуренцию терминальных сеансов.
Настройка дисковой подсистемы и исключений антивируса. Перенесем файл информационной базы на высокоскоростной накопитель (NVMe/SSD). Добавим расширения файлов *.1CD, *.1CL, *.cfl, а также временные каталоги пользователей в список исключений антивирусного сканера.
Профилактическое обслуживание. Регулярно выполним тестирование и исправление информационной базы в конфигураторе (пункт меню «Администрирование» — «Тестирование и исправление») с обязательными опциями переиндексации и сжатия таблиц, а также проверим целостность файла утилитой chdbfl.exe.