Перенос серверов 1С и СУБД в облачные хранилища или на удаленные серверные площадки в интернете — популярный шаг для обеспечения мобильности сотрудников и безопасности данных. Однако такая архитектура часто преподносит неприятные сюрпризы в виде резкого снижения производительности. Типичный сценарий: один из сотрудников жалуется, что программа запускается по 40–60 секунд, в то время как под учетной записью другого пользователя (или под вновь созданным тестовым аккаунтом) база данных открывается практически мгновенно — за 3–5 секунд. При этом сетевой канал во время запуска «проблемного» пользователя загружается на максимум, а замер производительности в конфигураторе не показывает никакой активности программного кода конфигурации.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы платформы 1С:Предприятие и СУБД, а также по шагам восстановим быструю работу системы без необходимости удаления и повторного заведения пользователей.
Когда мы запускаем клиентское приложение 1С:Предприятие, еще до выполнения первой строчки программного кода конфигурации (которая обычно находится в обработчике события ПередНачаломРаботыСистемы модуля управляемого приложения), платформа обязана подготовить и инициализировать рабочее окружение пользователя. Для этого она обращается к базе данных за пользовательским профилем.
Рассмотрим ключевые технические факторы, которые приводят к возникновению задержки:
dbo.Files. Каждому пользователю соответствует бинарный файл настроек с именем вида <Идентификатор_Пользователя>.pfl (например, 071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl)..pfl постепенно накапливает устаревшие и кэшированные данные. Его размер может вырасти с нескольких килобайт до 15–30 мегабайт и более.%AppData%\1C\1Cv8) не решает проблему, так как бинарный профиль хранится на сервере в СУБД. Также стандартная процедура очистки настроек внутри режима «1С:Предприятие» («Очистить настройки» в меню администратора) удаляет записи из таблиц пользовательских настроек (таких как _SystemSettings, _RepSettings), но при этом сам файл-контейнер .pfl в таблице dbo.Files часто остается прежнего размера или содержит поврежденный бинарный кэш, который платформа продолжает скачивать при каждом старте.Решением проблемы является полное удаление раздутого файла настроек пользователя непосредственно в СУБД. При следующем запуске платформа 1С автоматически создаст для этого пользователя чистый, минимальный по размеру файл .pfl, и запуск снова станет мгновенным.
Для выполнения этой процедуры потребуются права администратора СУБД (например, в MS SQL Server Management Studio или pgAdmin для PostgreSQL). Перед началом любых манипуляций с базой данных обязательно создайте резервную копию (бэкап) базы данных!
Для начала нам необходимо выяснить, какой именно файл в таблице dbo.Files принадлежит проблемному пользователю. Нам нужен его уникальный идентификатор (UUID). Выяснить его можно двумя путями.
Способ А: Через запрос к СУБД. Подключимся к базе данных и выполним SQL-запрос к системной таблице пользователей 1С:
SELECT [ID], [Name] FROM [dbo].[v8users]
Найдем в колонке Name имя нашего проблемного пользователя и скопируем значение из колонки ID. Это и есть искомый UUID.
Способ Б: Через программный код в 1С. Если у нас есть возможность запустить внешнюю обработку или выполнить код в консоли кода, мы можем получить UUID пользователя программно с помощью следующего фрагмента:
ПользовательИнформБазы = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяПроблемногоПользователя");
Если ПользовательИнформБазы <> Неопределено Тогда
Сообщить("Имя: " + ПользовательИнформБазы.Имя + " | UUID: " + ПользовательИнформБазы.УникальныйИдентификатор);
КонецЕсли;
Предположим, полученный UUID равен: 071523a4-516f-4fce-ba4b-0d11ab7a1893.
Теперь выполним удаление записи настроек данного пользователя из базы данных. Для этого в консоли СУБД запустим следующий запрос (замените UUID в запросе на полученный вами на предыдущем шаге):
-- Удаляем основной файл профиля пользователя
DELETE FROM [dbo].[Files]
WHERE [FileName] = '071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl'
-- Удаляем резервную копию профиля пользователя (если она существует)
DELETE FROM [dbo].[Files]
WHERE [FileName] = '071523a4-516f-4fce-ba4b-0d11ab7a1893.pf_'
После успешного выполнения этого запроса при первом входе пользователя платформа 1С не найдет старый тяжелый файл настроек, инициализирует профиль с нуля и создаст в СУБД новую запись размером всего в несколько килобайт. Время запуска сократится до минимума.
В некоторых случаях, если запуск стал быстрее, но задержка всё еще ощущается при переходе от авторизации к открытию начальной страницы (между процедурами ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы), рекомендуется очистить настройки отчетов и форм пользователя в других таблицах. В этих таблицах идентификатор пользователя хранится в бинарном формате binary(16).
Для этого переведем строковый UUID в бинарный вид (уберем дефисы и добавим префикс 0x), например: 0x071523a4516f4fceba4b0d11ab7a1893 (для MS SQL), и выполним очистку:
-- Очистка системных настроек форм пользователя
DELETE FROM [dbo].[_SystemSettings] WHERE [User] = 0x071523a4516f4fceba4b0d11ab7a1893
-- Очистка настроек отчетов пользователя
DELETE FROM [dbo].[_RepSettings] WHERE [User] = 0x071523a4516f4fceba4b0d11ab7a1893
-- Очистка общих настроек пользователя
DELETE FROM [dbo].[_CommonSettings] WHERE [User] = 0x071523a4516f4fceba4b0d11ab7a1893
Важно понимать, что физическое удаление строк СУБД из таблиц не приводит к автоматическому уменьшению размера файлов базы данных на диске и не всегда высвобождает страницы оперативной памяти. СУБД помечает это место как свободное для будущих записей. Чтобы завершить процедуру очистки и перестроить индексы таблицы, рекомендуется выполнить регламентные процедуры обслуживания.
Выполним реиндексацию таблицы настроек и освободим неиспользуемое пространство на диске (Shrink) средствами СУБД:
-- Перестроение индексов для таблицы файлов
ALTER INDEX ALL ON [dbo].[Files] REBUILD;
GO
-- Сжатие базы данных для возврата свободного места операционной системе (в примере имя базы: My1CDatabase)
DBCC SHRINKDATABASE (N'My1CDatabase');
GO
При использовании PostgreSQL вместо этих команд выполните операцию VACUUM FULL ANALYZE Files; через консоль pgAdmin или psql.
Если специфика вашего бизнеса требует удаленной работы пользователей напрямую с базой данных 1С, подобные проблемы с раздуванием кэша настроек могут повторяться. Чтобы исключить их в будущем, проанализируем и внедрим следующие архитектурные подходы:
Администрирование — Настройки пользователей и прав — Настройки пользователей. Здесь вы можете точечно очистить неиспользуемые настройки форм и отчетов для сотрудников, которые давно не работают с определенными разделами программы.Применение описанной методики позволит оперативно решить проблему долгого входа в 1С без радикального удаления пользователей и сохранит стабильность работы системы в распределенной сетевой инфраструктуре.