Начиная с SQL Server 2008 появилась возможность сжимать резервные копии при их создании. Изначально она была доступна только в Enterprise Edition, но начиная с SQL Server 2008 R2 её добавили и в Standart Edition. Я использую сжатие резервных копий практически всегда, она позволяет экономить свободное место и ускоряет процесс создания backup. Следует быть готовым к тому, что сжатие потребляет дополнительные ресурсы.
Следующим способом ускорить процесс создания резервной копии является деление backup на разные файлы и диски, то есть создание backup не из одного файла, а из множества. Это позволит выполнить создание резервных копий в несколько потоков. Данный метод работает только если у вас достаточно ресурсов (IO + CPU, если используем сжатие резервных копий).
Третьим способом является указание дополнительных параметров создания резервных копий.
Давайте начнём с презентации оборудования для тестирования — 96 ядер Unisys ES7000 model 7600R с 2 DSI Solid State Disk пропускная способность которых 6+ GB/sec IO. Для замера скорости создания резервных копий мы использовали счётчики Disk Read Bytes/sec и Disk Write Bytes/sec.
Сжатие резервных копий (Database Backup Compression):
По-умолчанию сжатие резервных копий отключено, но это поведение можно изменить через SQL Server Management Studio (SSMS) или через запрос. Через SSMS можно включить как глобально, так и указать опцию при создании backup. Для включении опции глобально необходимо нажать правой кнопкой мышки на экземпляре > Свойства > Database Settings > там выбрать галочку «Compress backup».
Для того, чтобы указать опцию только для конкретного backup, нужно: нажать правую кнопку мышки на БД > Tasks > Backup > Backup Option > Выбрать в «Set backup compression» опцию «Compress backup».
Чтобы включить сжатие для всех backup через скрипт, необходимо:
USE master GO EXEC sp_configure backup compression default, '1'; RECONFIGURE WITH OVERRIDE
А для конкретного backup, требуется просто добавить опцию COMPRESSION:
Деление резервных копий:
В моём случае классический backup со сжатием был выполнен со скоростью 1400 MB/sec, как только я разбил процесс создания резервной копии на несколько файлов, скорость увеличилась до 2300 MB/sec, что является существенной разницей. Как это выглядит:
BACKUP DATABASE [Northwind] TO DISK = 'C:\Northwind_file1.bak', DISK = 'D:\Northwind_file2.bak', DISK = 'E:\Northwind_file3.bak', DISK = 'F:\Northwind_file4.bak' WITH INIT , NOUNLOAD , NAME = 'Northwind backup', NOSKIP , STATS = 10, NOFORMAT, COMPRESSION
Дополнительные опции создания резервных копий:
Существует несколько дополнительных опций резервного копирования, которые могут помочь нам ускорить процесс их создания:
BUFFERCOUNT: Определяет общее число IO буферов, используемых для создание резервной копии. Будьте осторожны при указании большого значения, так как такой backup может вызвать ошибку переполнения буфера из-за нехватки памяти.
MAXTRANSFERSIZE: Указывает наибольший объем пакета данных в байтах для обмена данными между SQL Server и носителем резервного набора. Поддерживаются значения, кратные 65 536 байтам (64 КБ), вплоть до 4 194 304 байт (4 МБ). По-умолчанию 1 Мб.
Общее используемое буферами пространство определяется по следующей формуле: buffercount * maxtransfersize.
BLOCKSIZE: Указывает размер физического блока в байтах. Поддерживаются размеры 512, 1 024, 2 048, 4 096, 8 192, 16 384, 32 768 и 65 536 байт (64 КБ). Значение по умолчанию равно 65536 для ленточных устройств и 512 для других устройств. Обычно в этом параметре нет необходимости, так как инструкция BACKUP автоматически выбирает размер блока, соответствующий устройству. Явная установка размера блока переопределяет автоматический выбор размера блока.
Если создается резервная копия, которую планируется копировать на компакт-диск и восстанавливать с него, укажите BLOCKSIZE=2048.
Тестирование:
После перебора оптимальных значений для вышеперечисленных параметров, я пришёл к следующим значениям на моём оборудовании: BUFFERCOUNT = 2200, BLOCKSIZE = 65536, MAXTRANSFERSIZE=2097152:
BACKUP DATABASE [Northwind] TO DISK = 'C:\Northwind_file1.bak', DISK = 'D:\Northwind_file2.bak', DISK = 'E:\Northwind_file3.bak', DISK = 'F:\Northwind_file4.bak' WITH INIT , NOUNLOAD , NAME = 'Northwind backup', NOSKIP , STATS = 10, NOFORMAT, COMPRESSION, BUFFERCOUNT = 2200, BLOCKSIZE = 65536, MAXTRANSFERSIZE=2097152
Скорость создания резервной копии выросла с 1400 MB/sec до 3939 MB/sec. Согласитесь, результаты впечатляют.
Небольшой бонус:
Чтобы проверить как быстро вы можете читать из БД или определённых файловых групп, вы можете использовать опцию DISK = ‘NUL’:
BACKUP DATABASE [TPCH_1TB] FILEGROUP = 'SSD3500_0', FILEGROUP = 'SSD3500_1' TO DISK = 'NUL' WITH COMPRESSION , NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD , BUFFERCOUNT = 2200 , BLOCKSIZE = 65536 , MAXTRANSFERSIZE=2097152
Выводы:
Сжатие резервных копий при создании очень полезная возможность, которые я рекомендую пользоваться всем, если у вас это не вызывает дополнительных проблем. Тем самым вы ускорите создание резервных копий и сохраните место на диске. Деление файла backup на разные файлы и диски с тонкой настройкой опций BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE так же позволяет существенно ускорить создание резервных копий.
*** *** *** *** *** *** *** *** *** *** *** ***
Полезные Скрипты
Рубрика Проверь себя
Ссылка на наш канал YouTube