SQL Server 即時文件初始化

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

  1. 本文所涉及的內容(Contents)
  2. 背景(Contexts)
  3. 基礎知識(Rudimentary Knowledge)
  4. 實現過程(Process)
  5. 疑問(Questions)
  6. 參考文獻(References)

二.背景(Contexts)

    數據庫服務器在爲表分配初始值的時候很慢,分配初始值40GB的數據文件,花了30多分鐘,一開始的時候一直認爲是服務器磁盤的寫入速度太慢形成的,後來通過北京-宋沄劍的提醒:即時文件初始化(Instant File Initialization),設置這一選項以後,速度提高到了19秒,下面將描述這個優化的設置過程。html

三.基礎知識(Rudimentary Knowledge)

就數據庫而言,如下幾種狀況須要對文件初始化:數據庫

1. 建立數據庫;安全

2. 向現有數據庫中添加文件、日誌或數據;服務器

3. 增大現有文件的大小(包括自動增加操做);網絡

4. 還原數據庫或文件組;性能

  執行上面的操做,操做系統須要用零來填充文件進行初始化。在 SQL Server 中,能夠在瞬間對數據文件進行初始化。即時文件初始化將回收已使用的磁盤空間而不使用零來填充該空間。而在向文件中寫入新數據時,磁盤內容將被覆蓋。日誌文件不能當即初始化。測試

  即時文件初始化功能僅在向 SQL Server (MSSQLSERVER) 服務賬戶授予了 SE_MANAGE_VOLUME_NAME 以後纔可用。Windows Administrator 組的成員擁有此權限,並能夠經過將其餘用戶添加到【執行卷維護任務】安全策略中來爲其授予此權限。優化

四.實現過程(Process)

首先運行gpedit.msc,按照Figure1的路徑,找到【執行卷維護任務】,如Figure2所示,默認的狀況下它已經設置了Administrators組的;spa

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權限詳解

相關文章
相關標籤/搜索