问题
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)SQL Server 2005支持数据库即时文件初始化(Instant File Initialization),这种即时文件初始化可以跳过清零数据的页面,这样做可以在执行一些操作,比如创建数据库,增加文件到现有的数据库中,手动、通过自动增长(autogrowth)或保存一个数据库或文件组来增大现有数据库文件时,减少时间。但是,我们如何确定SQL Server正在使用这个功能?
专家解答
在SQL Server以前的版本中,数据和日志文件一开始是通过在你执行之前提到的某项操作时,用零归档这些文件来初始化的。在灾难备份和还原操作中,这是非常关键的,尤其是处理非常大的数据库时。
对SQL Server而言,即时文件初始化已经引进了。而这所做的是,它跳过磁盘上的零数据,因此不重写在磁盘上写过的先前的数据。操作系统只分配磁盘空间,但是文件的内容实际上是原先在磁盘上写的。这个功能对于运行在NTFS文件系统的Windows Server 2003或者Windows XP上的所有SQL Server 2005版本都适用。
即使它是可用的,你的实例也可能不能配置使用。要解决这个问题,你应该给你的SQL Server服务账号或者SQLServerMSSQLUser$instancename这个本地组
SE_MANAGE_VOLUME_NAME的权限。SQLServerMSSQLUser$instancename这个本地组创建于你安装SQL Server 2005并把SQL Server服务账号加到这个数据库中。要做到这些,服务账号和本地组需要被授予“Perform Volume Maintenance Task”的本地安全权限。默认情况下,本地管理员组已经有这个许可,所以如果你的服务账号已经是这个组的一员,那么你没必要去做什么事情。
请注意,这只适用于数据文件而不适用于日志文件,所以如果你有大量的事务日志文件,而这些文件又作为你数据库备份的一部分,那么数据库文件会即时创建而日志文件不会。日志文件在被写回磁盘之前需要被清零。
注意事项
即使这个改进了autogrowth事件的文件增长性能,它不应作为正确排列你数据库文件来达到最小化的替代方法。如果不能避免,使其自动增长。另外,当SQL Server服务在运行时,如果你把这个权限给服务账号,那么为了使这个功能生效你必须停止并重启服务。你也可以通过运行gpupdate /force命令立即在安全策略中应用修改。
这样做也有安全风险。存在这样的可能性,那就是你会通过未授权的账户访问磁盘上的非零数据。想像一个数据文件没有在磁盘上清零的被删除的数据库!如果因为自由访问控制列表(DACL)仅用于数据文件被SQL Server使用时而导致没有自由访问控制列表被定义在文件上,那么任何用户都可以访问这些数据。如果披露已删内容的可能性是受到关注的,那么建议当自由访问控制列表从SQL Server中分离时,在你的数据文件或备份上明确地使用受限制的自由访问控制列表。
提示
配置你的SQL Server 2005实例来使用即时文件初始化。
在一个SQL Server 2005实例上,通过还原一个大型数据库(任何大于100GB)来测试它。
在一个测试服务器上,不经过许可还原数据库备份并且衡量还原的时间。
删除这个还原的数据库并停止SQL Server服务。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)把“Perform Volume Maintenance Task”授权给SQL Server服务账号并重启服务。
再次还原数据库备份并且衡量还原的时间。