为什么将 SQL Server 用户添加到“执行卷维护任务”中可以大大提高数据库调整大小的速度?

Nik*_*tov 20 performance sql-server

如果我想创建 5GB 的数据库

CREATE DATABASE [test]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
Run Code Online (Sandbox Code Playgroud)

在我的 SSD 上需要1 分钟

但是当我将 SQL Server 用户添加到 Perform volume maintenance tasks

在此处输入图片说明

它只需要1-2 秒

这是为什么?有人可以向我解释这是什么原因吗?

Tho*_*ger 27

那是因为Instant File Initialization。简而言之,SQL Server 可以对数据库数据文件(而不是事务日志文件)利用此特权。这是什么意思的是,SQL Server会不会在初始化时必须零出数据文件(S)。

如果没有授予 SQL 服务帐户的“执行卷维护任务”特权,则在创建数据库时,SQL Server 需要将“test.mdf”和“test_log.ldf”清零。

使用“执行卷维护任务”特权权限集,SQL Server 只需要将“test_log.ldf”清零。显着减少了开销,因此最大限度地缩短了CREATE DATABASE测试的持续时间。

参考资料
如何以及为什么启用即时文件初始化
即时初始化 – 什么、为什么和如何?