zoukankan      html  css  js  c++  java
  • SQL Server 即时文件初始化

    一.本文所涉及的内容(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 AUTHORITYNETWORKSERVICE,如Figure4所示。

    wps_clip_image-1487

    (Figure4:NT AUTHORITYNETWORKSERVICE)

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

    wps_clip_image-9402

    (Figure5:重启服务报错)

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

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

    wps_clip_image-16463

    (Figure6:Administrators组)

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

    --测试即时文件初始化
    CREATE DATABASE [TestFileInit] ON  PRIMARY 
    ( NAME = N'TestFileInit', FILENAME = N'F:DBBackupTestFileInit.mdf' , SIZE = 41943040KB , FILEGROWTH = 1024KB )
     LOG ON 
    ( NAME = N'TestFileInit_log', FILENAME = N'F:DBBackupTestFileInit_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 AUTHORITYNETWORKSERVICE加入到Windows组里面有什么不安全隐患嘛?

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

    六.参考文献(References)

    数据库文件初始化

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

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

  • 相关阅读:
    Element Plus表单resetFields重置表单无效
    thinkphp6通过中间件设置跨域
    centos7安装jdk
    面试
    行测-逻辑填空
    行测-语句表达
    行测-片段阅读
    行测-四大文明古国
    基于 OAuth2.0 协议的单点登录系统方案设计
    性能测试知识点+流程
  • 原文地址:https://www.cnblogs.com/gaizai/p/3516905.html
Copyright © 2011-2022 走看看