SQL Server 即时文件初始化

本文介绍了一种提高SQL Server文件初始化速度的方法——即时文件初始化。通过调整SQL Server服务账户权限,将原本耗时30多分钟的40GB数据文件初始化时间缩短至19秒。文章还探讨了即时文件初始化的适用场景及其对数据库性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.本文所涉及的内容(Contents)

  1. 本文所涉及的内容(Contents)
  2. 背景(Contexts)
  3. 基础知识(Rudimentary Knowledge)
  4. 实现过程(Process)
  5. 疑问(Questions)
  6. 参考文献(References)

二.背景(Contexts)

    数据库服务器在为表分配初始值的时候很慢,分配初始值40GB的数据文件,花了30多分钟,一开始的时候一直认为是服务器磁盘的写入速度太慢造成的,后来经过北京-宋沄剑的提醒:即时文件初始化(Instant File Initialization),设置这一选项之后,速度提升到了19秒,下面将描述这个优化的设置过程。

三.基础知识(Rudimentary Knowledge)

就数据库而言,以下几种情况需要对文件初始化:

1. 创建数据库;

2. 向现有数据库中添加文件、日志或数据;

3. 增大现有文件的大小(包括自动增长操作);

4. 还原数据库或文件组;

  执行上面的操作,操作系统需要用零来填充文件进行初始化。在 SQL Server 中,可以在瞬间对数据文件进行初始化。即时文件初始化将回收已使用的磁盘空间而不使用零来填充该空间。而在向文件中写入新数据时,磁盘内容将被覆盖。日志文件不能立即初始化。

  即时文件初始化功能仅在向 SQL Server (MSSQLSERVER) 服务帐户授予了 SE_MANAGE_VOLUME_NAME 之后才可用。Windows Administrator 组的成员拥有此权限,并可以通过将其他用户添加到【执行卷维护任务】安全策略中来为其授予此权限。

四.实现过程(Process)

首先运行gpedit.msc,按照Figure1的路径,找到【执行卷维护任务】,如Figure2所示,默认的情况下它已经设置了Administrators组的;

wps_clip_image-982

(Figure1:gpedit.msc)

wps_clip_image-1353

(Figure2:执行卷维护任务)

接着运行services.msc进入服务设置,查看到SQL Server (MSSQLSERVER)的登陆用户是【网络服务】(如Figure3所示),这就是造成初始化40GB文件花费了30多分钟的原因了,因为【网络服务】不具备SE_MANAGE_VOLUME_NAME的权限(可查看Administrators组成员);

wps_clip_image-21225

(Figure3:SQL Server (MSSQLSERVER))

双击SQL Server (MSSQLSERVER)服务进入设置,在登陆的选项卡中可以看到帐号是:NT AUTHORITY\NETWORKSERVICE,如Figure4所示。

wps_clip_image-1487

(Figure4:NT AUTHORITY\NETWORKSERVICE)

直接勾选【本地系统帐号】,在重启SQL Server (MSSQLSERVER)时遇到了下图的错误:

wps_clip_image-9402

(Figure5:重启服务报错)

查看了相关的系统事件日志,在SQL Server服务无法使用管理员身份启动 中解决了(禁用掉SQL Server的协议Shared Memory),设置完之后重启服务SQL Server (MSSQLSERVER)。

而另外一种思路就是把NT AUTHORITY\NETWORKSERVICE加入到Administrators组中,如Figure6所示。注意:这种方式一样需要重启SQL Server (MSSQLSERVER)服务。

wps_clip_image-16463

(Figure6:Administrators组)

下面我们就来测试下创建40GB文件的性能对比:

--测试即时文件初始化
CREATE DATABASE [TestFileInit] ON  PRIMARY 
( NAME = N'TestFileInit', FILENAME = N'F:\DBBackup\TestFileInit.mdf' , SIZE = 41943040KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'TestFileInit_log', FILENAME = N'F:\DBBackup\TestFileInit_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

wps_clip_image-26367

(Figure7:之前创建时间)

wps_clip_image-8020

(Figure8:之后创建时间)

注意:禁用即时文件初始化功能,要想让这个禁用生效,一样需要重启SQL Server (MSSQLSERVER)服务。

五.疑问(Questions)

1. 在安装SQL Server的时候,如何设置会使得SQL Server服务是以【网络服务】登陆的?

2. 禁用掉SQL Server的协议Shared Memory,这个协议是用来干嘛的?有什么作用?

3. 如果把NT AUTHORITY\NETWORKSERVICE加入到Windows组里面有什么不安全隐患嘛?

4. 当启用 TDE 时,即时文件初始化功能不可用。什么是TDE?

六.参考文献(References)

数据库文件初始化

为SQL Server 2005配置Windows即时初始化

Local System/Network Service/Local Service权限详解

### SQL Server 配置文件的操作指南 #### 创建配置文件SQL Server环境中,创建配置文件通常指的是设置用于特定目的的初始化参数集合。对于SQL Server服务本身而言,“配置文件”的概念更多体现在注册表键值或是`sqlservr.ini`这样的启动配置文件中。 为了实现更灵活的服务启动选项,可以在安装路径下找到或创建名为`sqlservr.ini`的文件[^1]。此文件允许指定额外的服务启动参数而不必每次都手动输入命令行参数。 ```ini [SERVER] -traceflag=3605 ``` 上述示例展示了如何向INI文件添加跟踪标志以帮助诊断问题。 #### 修改配置文件 修改现有的SQL Server配置可以通过多种方式进行: - **使用SQL Server Configuration Manager**: 这是一个图形界面工具,可以用来调整Windows服务属性以及网络协议等高级设置。 - **编辑注册表项**: 对于某些深入级别的配置更改,可能需要直接操作系统的注册表来改变SQL Server的行为模式。但是这种做法风险较高,建议谨慎行事并做好充分准备前的备份工作。 - **利用T-SQL脚本执行sp_configure存储过程**:这是最常用的方法之一,适用于大多数常规配置变更需求。例如增加最大内存限制: ```sql EXEC sp_configure 'max server memory (MB)', 4096; RECONFIGURE; ``` 以上方法均能有效地对SQL Server实例进行必要的自定义配置调整。 #### 定位配置文件 要定位SQL Server使用的配置信息源,可以从以下几个方面入手: - 查看默认位置下的`sqlservr.ini`文件; - 查询系统视图如`sys.configurations`获取当前生效的各项配置详情; - 利用SQL Server Error Log查看每次启动时加载的具体配置来源说明; 值得注意的是,除了这些静态配置外,动态管理视图(DMVs)也提供了实时监控和查询服务器状态的能力,这对于理解即时运行环境非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值