Обновление платформы «1С:Предприятие» — это стандартная процедура, которая призвана улучшить производительность, добавить новые функции и обеспечить совместимость с актуальными релизами конфигураций. Однако на практике системные администраторы и программисты иногда сталкиваются с ситуацией, когда после очередной установки новой версии работа пользователей превращается в кошмар. Программа начинает жутко зависать, а вместе с ней «намертво» зависает и весь персональный компьютер.
В этой статье мы подробно разберем реальный кейс, связанный с обновлением платформы до версии 8.3.16.1030. Мы выясним, почему эта версия признана сообществом крайне неудачной, проанализируем ошибки логической целостности базы данных, выявленные в ходе тестирования и исправления (ТИИ), и рассмотрим пошаговые методы полного восстановления работоспособности системы.
Для начала проанализируем поведение системы, описанное пользователями: сразу после запуска программа буквально «летает» в течение 15–20 минут, после чего начинает медленно реагировать на действия пользователя и в итоге полностью блокирует работу операционной системы. Такое поведение указывает на несколько системных проблем, заложенных на уровне ядра самого релиза 8.3.16.1030:
1cv8.exe) и сервера (rphost). Программа некорректно освобождает оперативную память при закрытии форм, генерации отчетов или выполнении фоновых заданий. В результате за 20 минут активной работы процесс 1С полностью поглощает доступную физическую RAM. ОС вынуждена непрерывно обращаться к файлу подкачки на жестком диске (swapping), что приводит к полной остановке работы всего компьютера.При проведении процедуры «Тестирование и исправление» (ТИИ) у пользователя были обнаружены серьезные ошибки логической целостности базы данных. Разберем детально каждую из них, выясним причины их появления и влияние на общую производительность системы.
В отчете ТИИ зафиксированы следующие строки:
Проверка логической целостности. РегистрСведений.БезопасноеХранилищеДанных.Измерение.Владелец <Объект не найден>... Объект, на который ссылается значение, отсутствует.
Рассмотрим подробнее, что представляет собой этот объект. Регистр РегистрСведений.БезопасноеХранилищеДанных — это служебный регистр, входящий в состав Библиотеки стандартных подсистем (БСП). Он предназначен для безопасного (зашифрованного) хранения конфиденциальной информации: паролей учетных записей электронной почты, токенов интеграции с государственными информационными системами, ключей доступа API и настроек обмена.
Измерение Владелец в этом регистре имеет составной тип данных и ссылается на объекты конфигурации, которые используют эти секреты (например, справочники Справочник.Пользователи, Справочник.УчетныеЗаписиЭлектроннойПочты или Справочник.Организации). Появление записи <Объект не найден> означает, что сам элемент справочника-владельца был безвозвратно удален из базы данных (например, напрямую программным кодом без контроля ссылочной целостности), а соответствующая ему запись с зашифрованными данными в регистре сведений осталась.
Влияние на зависания: При старте системы или выполнении регламентных заданий платформа инициализирует сессии пользователей и пытается считать их персональные настройки и ключи из безопасного хранилища. Натыкаясь на «битую» ссылку, фоновые механизмы БСП могут уходить в бесконечный цикл обработки исключений или генерировать скрытые ошибки, которые перегружают процессор и дисковую систему, усугубляя общую нестабильность платформы.
Вторая группа ошибок ТИИ выглядит так:
Проверка логической целостности. РегистрСведений.СоответствияОбъектовИнформационныхБаз.Измерение.УникальныйИдентификаторИсточника... СправочникСсылка.ФизическиеЛица...
Проанализируем эту ситуацию. Данный регистр используется механизмами синхронизации данных (например, при обмене между конфигурациями «Зарплата и управление персоналом» и «Бухгалтерия предприятия»). В нем сопоставляются уникальные идентификаторы (GUID) объектов в базе-источнике и базе-приемнике.
В данном случае сопоставление нарушилось для справочника Справочник.ФизическиеЛица. Вероятнее всего, в одной из баз было произведено слияние дублей физических лиц или их непосредственное удаление. Запись в регистре соответствий ссылается на несуществующий более идентификатор (GUID).
Влияние на зависания: Синхронизация данных обычно выполняется автоматически в фоновом режиме по расписанию. При наличии битых ссылок в таблице сопоставлений фоновое задание обмена не может корректно идентифицировать объект, аварийно завершается, запускается вновь и создает непрерывную паразитную нагрузку на дисковую подсистему (HDD/SSD) и СУБД. Именно это часто приводит к тому, что компьютер начинает тормозить через некоторое время после включения.
Для того чтобы проанализировать масштабы проблемы до запуска тяжелого процесса ТИИ, мы можем воспользоваться написанием небольшого программного кода в консоли запросов. Рассмотрим пример запроса, который позволяет локализовать битые ссылки в регистре безопасного хранилища:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Хранилище.Владелец КАК БитыйВладелец,
| Хранилище.Владелец.Представление КАК ПредставлениеВладельца
|ИЗ
| РегистрСведений.БезопасноеХранилищеДанных КАК Хранилище
|ГДЕ
| Хранилище.Владелец.ВерсияДанных ИС СУЛЛ
| И НЕ Хранилище.Владелец = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьЖурналаРегистрации("ПоискБитыхСсылок",
УровеньЖурналаРегистрации.Предупреждение, , ,
"Найден битый владелец: " + Строка(Выборка.БитыйВладелец));
КонецЦикла;
В данном примере мы используем обращение к реквизиту ВерсияДанных через точку от поля Владелец. Если объект в базе данных отсутствует physically, СУБД вернет значение NULL (в терминах языка запросов 1С — ИС СУЛЛ), что позволяет безошибочно локализовать поврежденные записи.
Для того чтобы полностью ликвидировать зависания системы и исправить повреждения структуры базы данных, нам необходимо выполнить три последовательных шага.
Поскольку релиз 8.3.16.1030 признан критически нестабильным, продолжать работу на нем категорически запрещено. У нас есть два пути решения:
8.3.15.1830). Они отличаются высокой стабильностью работы графической подсистемы и отсутствием утечек памяти.8.3.16.1148 (или более поздние версии веток 8.3.21 / 8.3.22, если это поддерживается вашей прикладной конфигурацией). В этих релизах разработчики устранили утечки памяти в процессах 1cv8.exe и оптимизировали работу библиотеки Cairo.После установки стабильной версии платформы нам необходимо очистить базу от накопившихся «битых» ссылок, которые вызывают сбои в фоновых заданиях. Разберем этот процесс по шагам:
РегистрСведений.БезопасноеХранилищеДанных и РегистрСведений.СоответствияОбъектовИнформационныхБаз вместо создания пустых элементов.Часто после обновления платформы или изменения метаданных в локальном кэше пользователя на жестком диске компьютера остаются старые графические схемы, временные файлы динамических списков и настройки форм. Это может провоцировать зависания даже на новой платформе. Проведем очистку кэша:
%localappdata%\1C\1Cv8%appdata%\1C\1Cv845e9821a-ef43-...). Это абсолютно безопасно и приведет лишь к сбросу индивидуальных настроек положения окон у пользователей.
Проанализировав ситуацию и выполнив указанные шаги, мы добьемся стабильной и плавной работы «1С:Предприятия». Программа перестанет поглощать оперативную память, фоновые обмены данными нормализуются благодаря удалению некорректных связей в СУБД, а зависания компьютера прекратятся.