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
测试的持续时间。
参考资料
如何以及为什么启用即时文件初始化
即时初始化 – 什么、为什么和如何?