关键词:零填充,即时文件初始化,IFI

转自:https://www.cnblogs.com/gaizai/p/3516905.html

概念:

  所有新申请的空间,sql server都要以0来填充完磁盘文件数据,以便造成安全隐患可以查看到只是逻辑删除的旧数据。

初始化数据和日志文件以覆盖之前删除的文件遗留在磁盘上的任何现有数据。 执行以下其中一项操作时,应首先通过零填充(用零填充)数据和日志文件来初始化这些文件:

  • 创建数据库。
  • 向现有数据库添加数据或日志文件。
  • 增大现有文件的大小(包括自动增长操作)。
  • 还原数据库或文件组。

文件初始化会导致这些操作花费更多时间。 但是,首次将数据写入文件后,操作系统就不必用零来填充文件。

一.本文所涉及的内容(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组的;

(Figure1:gpedit.msc)

(Figure2:执行卷维护任务)

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

(Figure3:SQL Server (MSSQLSERVER))

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

(Figure4:NT AUTHORITY\NETWORKSERVICE)

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

(Figure5:重启服务报错)

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

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

(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

(Figure7:之前创建时间)

(Figure8:之后创建时间)

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

五.疑问(Questions)

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

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

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

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

5.如何禁用IFI 即时文件初始化?

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

默认就是
2. 禁用掉SQL Server的协议Shared Memory,这个协议是用来干嘛的?有什么作用?
本地登录可以不开TCP连接 远程无影响
3. 如果把NT AUTHORITY\NETWORKSERVICE加入到Windows组里面有什么不安全隐患嘛? 巨大安全隐患,因为IIS等用户都是再NETWORKSERVICE攻破任何一个网络服务就掌握操作系统最高权限 4.TDE是透明数据加密,SQLServer2008以上版本的新功能http://msdn.microsoft.com/zh-cn/library/bb934049.aspx
5
.禁用IFI
  (1)把上述操作撤销修改
  (2)Trace Flag 1806 --禁用即时文件初始化,所有的磁盘空间请求全部使用填0初始化,可能造成在空间增长时产生阻塞。

六.参考文献(References)

数据库文件初始化

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

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

(5.2.1)配置服务器参数——即时文件初始化(IFI)的更多相关文章

  1. (5.2.2)配置服务器参数——dbcc跟踪标记(trace)

    关键字:跟踪标记,跟踪 [1]常规dbcc命令 dbcc help('?') --查看dbcc 所有命令,常规下只有32个常用的dbcc TRACEON(2588) --指定了2588标记的话,你就可 ...

  2. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  3. SQL Server 即时文件初始化

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 实现过程(Process) 疑问(Qu ...

  4. 使用即时文件初始化提高SQL Server性能

    今天我想谈下SQL Server里的一个特别话题——即时文件初始化(Instant File Initialization).对于你的SQL Server实例,如果你启用了即时文件初始化,在特定情况下 ...

  5. 使用服务器参数文件(SPFILE)管理初始化参数

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

  6. SSH SCP 远程密钥登录配置和服务器间的文件传输

    目录 ssh ssh是什么 ssh安装 使用ssh登录远程主机 退出登录 使用ssh执行单条指令 密钥验证 详细操作 scp rsync sftp 进阶 ssh ssh是什么 ssh (Secure ...

  7. 配置Yum源repo文件及搭建本地Yum服务器

    分享一篇配置Yum源repo文件及搭建本地Yum服务器的方法,希望对大家有用. Yum源的话有三大类: Base Extra Epel Base:就是你下载的光盘镜像里面的DVD1Extra:就是你下 ...

  8. 【转】php通过curl跨域向asp.net服务器上传文件及参数

    转:http://blog.sina.com.cn/s/blog_13331dce50102vq32.html 这是一个由php通过调用asp.net接口向asp.net服务器post上传文件及参数并 ...

  9. mysql性能优化之服务器参数配置-内存配置

    MySQL服务器参数介绍 MySQL获取配置信息路径 命令行参数 mysqld_safe --datadir=/data/sql_data 配置文件 mysqld --help --verbose | ...

随机推荐

  1. Alcatel OmniSwitch 重置密码

    OmniSwitch 6250重置密码 Press s to STOP AT MINIBOOT... [Miniboot]->cd "network" value = 0 = ...

  2. Spring MVC JSON自己定义类型转换(续)

    前面提到了两种转换类型的方法(Spring MVC JSON自己定义类型转换),这里针对Json转换提供一种更简便的方法. 通过配置全局的日期转换来避免使用麻烦的注解. 首先用到了一个简单的日期工具类 ...

  3. linux高级技巧:集群之keepalived

    1.keepalived简单介绍         Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案.能够利用其来避免单点故障.使用多台节点安装keepalived. 其它的节点用 ...

  4. Workspace in use or cannot be created, choose a different one.--错误解决的方法

    eclipse 使用一段时间后.有时会由于一些故障自己就莫名奇异的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: Workspace in use or ...

  5. Windows编程中char*转LPCWSTR解决的方法总结

    Windows编程中常常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题.于是自己总结了几种解决的方法. 1.通过T2W转换宏 char* szStr = " ...

  6. 转 java synchronized详解

    转自 http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能 ...

  7. Android资源文件命名规范

    在复杂Android应用的开发中,资源文件的规范命名非常重要,能帮助设计人员和开发人员减小沟通成本.资源的名字尽量力求准确,可以适当长一些,但换回的价值是值得的. 关于WCC的Android开发,资源 ...

  8. Script Library 配置 和 使用

    Script Library有两个级别,Workspace级别和Project级别 使用:这里的package指的是Script Library下的文件夹名,和引用代码里的package没有关系

  9. 51Nod 1250 排列与交换 —— DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250 看了半天... 把第一问想成逆序对的话似乎很容易想了,新加入 ...

  10. ADTS结构

    ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式.转载请注明来自:http://www.binkery.com/ ADTS内容及结构一般情况下 ...