Мгновенная Инициализация Файла

Когда SQL-сервер резервирует новое дисковое пространство и инициализирует его нулями.

Такое поведение можно отключить и как следствие сократить время выполнения некоторых операций и снизить нагрузку на дисковую подсистему.

Возможность резервировать дисковое пространство без инициализации называется Мгновенная инициализация файла (мгновенная инициализация файлов).

Эта особенность не очень известна, хотя ее использование стало возможным с тех пор, как SQL-сервер 2005 .

Какие преимущества вы можете получить от Мгновенная инициализация файла : 1. Ускорить создание новой базы данных 2. Уменьшите задержку и сократите время, необходимое для увеличения файлов данных.

3. Сократите время старта SQL-сервер , с момента инициализации база данных tempdb будет быстрее 4. Сократить время при восстановлении из резервной копии, т.к.

перед восстановлением SQL-сервер резервирует место для файлов, а затем переносит в них информацию из резервной копии.

Важно отметить, что Мгновенная инициализация файла Работает только для файлов данных (MDF и NDF).

Файлы журналов (LDF) всегда инициализируются нулевым значением.

Как использовать Мгновенная инициализация файла ? Все очень легко включается.

Открытие Диспетчер конфигурации SQL-сервера и узнаем под каким именем запущен наш экземпляр SQL-сервер .



Мгновенная инициализация файла

Следующий через Локальная политика безопасности (Локальная политика безопасности) ищет Назначение прав пользователя (Название прав пользователя) – Выполнение задач по обслуживанию тома (Выполнение задач по обслуживанию тома)

Мгновенная инициализация файла

Добавляем в настройки нужную нам личность, как показано на картинке.



Мгновенная инициализация файла

Права, необходимые для работы Мгновенная инициализация файла , пример SQL-сервер проверяет только один раз - при запуске.

Поэтому нужно перезагрузить SQL-сервер чтобы наши настройки вступили в силу.

Теперь проведем эксперименты.

Для начала давайте проверим.

включен ли он Мгновенная инициализация файла ? Если он отключен, то при выполнении запроса:

  
  
  
  
   

USE [master] GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO DBCC TRACEON(3004, 3605, -1) WITH NO_INFOMSGS CREATE DATABASE IFI_DB DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO EXEC sp_readerrorlog 0, 1

В журнале видно, что файлы данных заполняются нулями:

Zeroing D:\DATABASES\SQL_2012\DATA\IFI_DB.mdf from page 0 to 520 (0x0 to 0x410000) Zeroing completed on D:\DATABASES\SQL_2012\DATA\IFI_DB.mdf Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 0 to 130 (0x0 to 0x104000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf Starting up database 'IFI_DB'.

FixupLogTail(progress) zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from 0x5000 to 0x6000. Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 3 to 33 (0x6000 to 0x42000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf

Но если Мгновенная инициализация файла включен, то нулями заполняется только файл журнала:

Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 0 to 130 (0x0 to 0x104000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf Starting up database 'IFI_DB'.

FixupLogTail(progress) zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from 0x5000 to 0x6000. Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 3 to 33 (0x6000 to 0x42000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf

Если лень смотреть лог, можно воспользоваться следующим скриптом:

USE [master] GO SET NOCOUNT ON; IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO IF OBJECT_ID('tempdb.dbo.#IFI') IS NOT NULL DROP TABLE #IFI GO CREATE TABLE #IFI (dt DATETIME, info VARCHAR(50), txt VARCHAR(MAX)) GO DBCC TRACEON(3004, 3605, -1) WITH NO_INFOMSGS CREATE DATABASE IFI_DB DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO INSERT INTO #IFI EXEC sp_readerrorlog 0, 1, 'Zeroing' IF EXISTS( SELECT 1 FROM #IFI WHERE txt LIKE 'Zeroing completed%' AND txt LIKE '%IFI_DB.mdf%' AND dt > DATEADD(HOUR, -1, dt) ) PRINT 'Instant File Initialization = OFF' ELSE PRINT 'Instant File Initialization = ON'

Если вам необходимо временно отключить Мгновенная инициализация файла , то можно включить флаг трассировки 1806. Но как показывает практика, возможность использования этого функционала существенно экономит время и снижает нагрузку на диск.

Вот пара тестовых примеров и время их запустить Мгновенная инициализация файла и без:

USE [master] GO IF DB_ID('IFI_DB') IS NOT NULL

Теги: #мгновенная инициализация файла #sql-сервер #sql #Microsoft SQL Server

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.