Как ускорить восстановление больших баз данных в SQL Server
Все администраторы знают, что восстановление базы данных из резервной копии — процесс не быстрый. Особенно, если база большая.
А что если я скажу, что время восстановления БД можно сократить более чем вдвое при помощи одной простейшей опции?
Давайте проведём эксперимент. Вот база данных размером 100 ГБ, под завязку заполненная данными.
Все данные этой базы лежат в единственном файле.
Я сделаю резервную копию этой базы и затем восстановлю базу из резервной копии. И резервное копирование и восстановление я провожу самым обыкновенным способом без каких-либо хитроумных настроек.
А теперь посмотрите внимательно на выдачу инструкции RESTORE DATABASE:
Сама команда восстановления сообщает, что она выполнялась 3331 секунду — это примерно 55 минут. Но с точки зрения внешнего наблюдателя восстановление базы заняло больше двух часов! Получается, что 55 минут сервер занимался непосредственно восстановлением БД, а ещё час двадцать занимался неизвестно чем.
На самом деле это время сервер потратил на выделение места под восстанавливаемую базу. Сложно поверить, но это заняло в полтора раза больше времени, чем полезный процесс. Вас устраивает, что КПД дисковой подсистемы при восстановлении всего 40%?
Если нет, то давайте зайдём в локальную политику безопасности и предоставим учётной записи, под которой работает SQL Server разрешение «выполнение задач по обслуживанию томов» (в английской версии — «perform volume maintenance tasks»). Чтобы это подействовало необходимо перезапустить службу SQL Server. Теперь сервер сможет гораздо быстрее выделять место на диске для резервных копий, восстановления баз, а также при расширении файлов баз и журналов.
Повторим эксперимент с восстановлением стогигабайтной базы:
Теперь база действительно восстанавливается за 55 минут — это почти в два с половиной раза быстрее, чем при настройках по умолчанию!
0 комментариев