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


17

如果我想用创建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%)

我的SSD 需要1分钟

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

在此处输入图片说明

只需要1-2秒

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


4
拒绝投票的人可以解释为什么拒绝投票吗?对我来说,这似乎是个好问题。
Thomas Stringer

Answers:


26

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

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

设置了“执行卷维护任务”特权权限后,SQL Server只需要将“ test_log.ldf”清零。显着减少了开销,因此可以最大程度地缩短CREATE DATABASE测试时间。

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


这个接缝是很棒的,但是为什么默认设置是关闭的呢?
艾哈迈德·阿卜杜勒·卡德(Ahmed Abdelqader)

1

这不会影响.ldf文件(日志文件),至少不会影响MS文章

为什么呢 速度

为什么不这样做呢? 可能的安全风险。有人可能侵入您的盒子,并可能读取非零存储空间并检索该数据。风险很小,但仍然有风险。这就是默认情况下未启用它的原因。

详细说明:如何以及为何启用即时文件初始化


读者注意:如果您担心有人入侵您的服务器并从已删除的文件中读取旧数据,则关闭IFI可能会有所帮助,但是我认为这还不够。而且,如果您已经拥有可以覆盖已删除文件的软件,那么您可能可以打开IFI,因为该软件应该已经将空间清零了。
RDFozz

现在,在安装过程中(从SQL 2016开始)有一个复选框将此权限授予SQL Server服务帐户,因此我想MS在安全性方面也要宽松一些。
加雷斯·里昂斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.