При обслуживании и переносе крупных информационных баз 1С:Предприятия системные администраторы часто сталкиваются с ситуацией, когда процесс восстановления (RESTORE DATABASE) выполняется значительно дольше ожидаемого времени или надолго замирает на отметке 100% с типами ожиданий IO_COMPLETION или SLEEP_BPOOL_FLUSH. Разберем по шагам, какие процессы происходят в СУБД в этот момент, почему процесс кажется зависшим и как существенно ускорить развертывание резервных копий.
Когда счетчик прогресса восстановления доходит до 100%, фактическая работа СУБД еще не завершена. Проанализируем ключевые факторы, влияющие на общую продолжительность процедуры:
STATS отображает только вычитку и запись страниц данных из файла архива на диск. После достижения 100% СУБД приступает к приведению базы к согласованному состоянию: накатывает зафиксированные транзакции (REDO) и откатывает незавершенные (UNDO), зафиксированные в резервной копии. Если в момент снятия бэкапа в 1С выполнялись масштабные регламентные задания, перерасчет итогов или проведение документов, эта фаза может длиться несколько часов..mdf и .ndf операционная система полностью перезаписывает выделяемое дисковое пространство нулями. Для баз объемом сотни гигабайт на медленных дисках (например, со скоростью вращения шпинделя 5400 RPM) этот процесс занимает огромное количество времени еще до старта распаковки..ldf — он зануляется принудительно. Если исходный лог-файл имел размер в сотни гигабайт или содержал десятки тысяч виртуальных лог-файлов (VLF), фаза восстановления кратно замедляется.IO_COMPLETION сигнализируют о том, что поток СУБД заблокирован в ожидании окончания дискового ввода-вывода, а SLEEP_BPOOL_FLUSH указывает на задержки при сбросе измененных страниц из оперативной памяти на диск из-за высокой дисковой очереди.Рассмотрим базовую системную настройку, которая позволяет мгновенно выделять дисковое пространство под файлы данных .mdf без необходимости их зануления:
secpol.msc).MSSQLSERVER для применения изменений.Для ускорения чтения и записи архива разберем использование параметров тонкой настройки буферизации ввода-вывода в запросе T-SQL:
RESTORE DATABASE [MyBase1C]
FROM DISK = N'D:\Backup\MyBase1C_Full.bak'
WITH
MOVE N'MyBase1C_Data' TO N'E:\SQLData\MyBase1C.mdf',
MOVE N'MyBase1C_Log' TO N'L:\SQLLog\MyBase1C_log.ldf',
STATS = 5,
BUFFERCOUNT = 200,
MAXTRANSFERSIZE = 4194304,
RECOVERY;
Проанализируем используемые параметры:
BUFFERCOUNT — задает количество буферов ввода-вывода (рекомендуется устанавливать от 50 до 300 в зависимости от доступного объема RAM).MAXTRANSFERSIZE — размер блока передачи данных в байтах (значение 4194304 соответствует 4 МБ, что значительно снижает дисковую очередь по сравнению со стандартными значениями).Чтобы убедиться, что восстановление базы данных не зависло, а выполняет внутренние транзакционные операции, выполним запрос к системным динамическим представлениям:
SELECT
r.session_id,
r.command,
r.percent_complete,
r.estimated_completion_time / 1000 / 60 AS Estimated_Minutes_Left,
r.wait_type,
r.wait_time,
r.last_wait_type
FROM sys.dm_exec_requests r
WHERE r.command IN ('RESTORE DATABASE', 'RESTORE LOG', 'DbMgrPartnerRestore');
Если поле percent_complete показывает 100%, но команда еще активна, в журнале ошибок SQL Server Error Log фиксируется ход выполнения фаз REDO и UNDO с отметками о проценте завершения.
Если база данных достигает больших объемов (от сотен гигабайт до нескольких терабайт), длительность резервного копирования и восстановления можно существенно сократить за счет аудита и очистки данных внутри 1С:
ХранилищеЗначений) сильно раздувает файл .mdf. Настроим хранение файлов на отдельных сетевых или локальных дисковых томах через стандартные механизмы 1С.ВерсииОбъектов часто занимают до трети общего объема базы данных.