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权限详解

  • 相关阅读:
    【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
    【POJ 2152】 Fire (树形DP)
    【POJ 1741】 Tree (树的点分治)
    【POJ 2486】 Apple Tree (树形DP)
    【HDU 3810】 Magina (01背包,优先队列优化,并查集)
    【SGU 390】Tickets (数位DP)
    【SPOJ 2319】 BIGSEQ
    【SPOJ 1182】 SORTBIT
    【HDU 5456】 Matches Puzzle Game (数位DP)
    【HDU 3652】 B-number (数位DP)
  • 原文地址:https://www.cnblogs.com/gaizai/p/3516905.html
Copyright © 2011-2022 走看看