Inicialización instantánea de archivos - Función Killer para SQL Server

Cuándo servidor SQL reservas nuevo espacio sobre a disco, se inicializa espacio con ceros Tal comportamiento se puede deshabilitar de este modo cortaring el tiempo para realizar algunas operaciones y la carga en el subsistema del disco.

Despacio de riesgo reserva sin que inicializarción hay llamado Inicialización instantánea de archivos. Esta característica no es muy conocida, aunque su uso ha sido posible desde Servidor SQL 2005.

El beneficios con Inicialización instantánea de archivos son como sigue:

1. Acelere la creación de una nueva base de datos.

2. Reduzca la latencia y el tiempo requerido para expandir los archivos de datos.

3. Reducir la hora de inicio de la servidor SQL debido a que es más rápido tempdb inicialización

4. Reduzca el tiempo de recuperación de la copia de seguridad, porque servidor SQL hace una copia de seguridad del espacio de los archivos antes de restaurarlos y luego transfiere la información de la copia de seguridad a los archivos.

Es importante tener en cuenta que Inicialización instantánea de archivos trabajo solo para archivos de datos (MDF y NDF). Archivo de registros (LDF) son siempre cero-inicializado

Cómo utilizar Inicialización instantánea de archivos?

La opción se puede incluir bastante simple. Abierto Administrador de configuración de SQL Server oficina ch nombre servidor SQL ejemplo.

Una instancia de SQL Server

Después, y sobre Política de seguridad local ventana norteir Asignación de derechos de usuario y seleccione Realizar tareas de mantenimiento de volumen.

Política de seguridad local

Sobre Configuración de seguridad local pestaña tambiéndd servidor ejemplo, como se muestra en la siguiente imagen.

Configuración de seguridad local

servidor SQL instancia comprueba rnecesitado para trabajando con Inicialización instantánea de archivos solo una vez, durante el inicio. Es por eso que necesitas reiniciar servidor SQL Aplicar sobre configuración.

Casos de prueba

primero vamos a ver si hay Inicialización instantánea de archivos incluido?

Si es así discapaz, cuando actua solicitud:

USE [master]
GO

IF DB_ID('IFI_DB') IS NOT NULL
    DROP Base de datos IFI_DB
GO

DBCC TRACEON(3004, 3605, -1) WITH NO_INFOMSGS
CREATE Base de datos IFI_DB
DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS
GO

IF DB_ID('IFI_DB') IS NOT NULL
    DROP Base de datos IFI_DB
GO

EXEC sp_readerrorlog 0, 1

en el registro de SQL Server, Uds estarán verás que los archivos de datos están llenos de ceros:

La opción está deshabilitada

Pero si Inicialización instantánea de archivos incluido, sólo entonces sobre archivo de registro lleno ceros:

La opción está habilitada

Alternativamentepuede utilizar el siguiente script:

USE [master]
GO

SET NOCOUNT ON;

IF DB_ID('IFI_DB') IS NOT NULL
    DROP Base de datos 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 Base de datos IFI_DB
DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS
GO

IF DB_ID('IFI_DB') IS NOT NULL
    DROP Base de datos 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'

En caso de que necesite desactivar temporalmente Inicialización instantánea de archivospuede incluir la bandera de rastreo de 1806. Sin embargo, como muestra la práctica, nosotrosing esta función ahorra mucho tiempo y reduce la carga del disco.

Aquí hay un par de pruebas y tiempo. gastado en su implementación con y sin Inicialización instantánea de archivos:

USE [master]
GO
IF DB_ID('IFI_DB') IS NOT NULL
	DROP Base de datos [IFI_DB]
GO
CREATE Base de datos [IFI_DB]
    CONTAINMENT = NONE
    ON PRIMARY (NAME = N'IFI_DB', FILENAME = N'D:DATABASESSQL_2012DATAIFI_DB.mdf', SIZE = 102400MB
    LOG ON (NAME = N'IFI_DB_log', FILENAME = N'D:DATABASESSQL_2012LOGIFI_DB_log.ldf', SIZE = 2048KB)
GO
-- OFF: 00:16:04
-- ON:  00:00:12

ALTER Base de datos [IFI_DB] MODIFY FILE (NAME = N'IFI_DB', SIZE = 204800MB)
GO
-- OFF: 00:14:32
-- ON:  00:00:11

BACKUP Base de datos [IFI_DB]
    TO DISK = N'D:DATABASESSQL_2012BACKUPIFI_DB.bak'
    WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, COMPRESSION
GO
IF DB_ID('IFI_DB') IS NOT NULL
    DROP Base de datos [IFI_DB]
GO
-- OFF: 00:00:59
-- ON:  00:00:58

USE [master]
GO
RESTORE Base de datos [IFI_DB]
    FROM DISK = N'D:DATABASESSQL_2012BACKUPIFI_DB.bak'
    WITH FILE = 1, NOUNLOAD
-- OFF: 00:28:03
-- ON:  00:00:16

Resumen

Usando c Inicialización instantánea de archivos hay una gran manera de reducir el tiempo de inactividad durante falla recuperación. La inicialización no llevará mucho tiempo Archivos eso relleno ellos afuera ceros antes de la recuperación. Asi que aqui esta Manten eso en mentere tan útil cosa como Inicialización instantánea de archivos.

PD: En SQL Server 2016, puede habilitar fácilmente esta opción después de instalar una nueva instancia.

Instalación de SQL Server 2016

Artículos de interés

Subir