天天看點

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

<a href="#_labelContents">本文所涉及的内容(Contents)</a>

<a href="#_labelContexts">背景(Contexts)</a>

<a href="#_labelRudimentary">基礎知識(Rudimentary Knowledge)</a>

<a href="#_labelProcess">實作過程(Process)</a>

<a href="#_labelQuestions">疑問(Questions)</a>

<a href="#_labelReferences">參考文獻(References)</a>

    資料庫伺服器在為表配置設定初始值的時候很慢,配置設定初始值40GB的資料檔案,花了30多分鐘,一開始的時候一直認為是伺服器磁盤的寫入速度太慢造成的,後來經過北京-宋沄劍的提醒:即時檔案初始化(Instant File Initialization),設定這一選項之後,速度提升到了19秒,下面将描述這個優化的設定過程。

就資料庫而言,以下幾種情況需要對檔案初始化:

1. 建立資料庫;

2. 向現有資料庫中添加檔案、日志或資料;

3. 增大現有檔案的大小(包括自動增長操作);

4. 還原資料庫或檔案組;

  執行上面的操作,作業系統需要用零來填充檔案進行初始化。在 SQL Server 中,可以在瞬間對資料檔案進行初始化。即時檔案初始化将回收已使用的磁盤空間而不使用零來填充該空間。而在向檔案中寫入新資料時,磁盤内容将被覆寫。日志檔案不能立即初始化。

  即時檔案初始化功能僅在向 SQL Server (MSSQLSERVER) 服務帳戶授予了 SE_MANAGE_VOLUME_NAME 之後才可用。Windows Administrator 組的成員擁有此權限,并可以通過将其他使用者添加到【執行卷維護任務】安全政策中來為其授予此權限。

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

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure1:gpedit.msc)

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure2:執行卷維護任務)

接着運作services.msc進入服務設定,檢視到SQL Server (MSSQLSERVER)的登陸使用者是【網絡服務】(如Figure3所示),這就是造成初始化40GB檔案花費了30多分鐘的原因了,因為【網絡服務】不具備SE_MANAGE_VOLUME_NAME的權限(可檢視Administrators組成員);

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure3:SQL Server (MSSQLSERVER))

輕按兩下SQL Server (MSSQLSERVER)服務進入設定,在登陸的頁籤中可以看到帳号是:NT AUTHORITY\NETWORKSERVICE,如Figure4所示。

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure4:NT AUTHORITY\NETWORKSERVICE)

直接勾選【本地系統帳号】,在重新開機SQL Server (MSSQLSERVER)時遇到了下圖的錯誤:

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure5:重新開機服務報錯)

而另外一種思路就是把NT AUTHORITY\NETWORKSERVICE加入到Administrators組中,如Figure6所示。注意:這種方式一樣需要重新開機SQL Server (MSSQLSERVER)服務。

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure6:Administrators組)

下面我們就來測試下建立40GB檔案的性能對比:

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure7:之前建立時間)

SQL Server 即時檔案初始化一.本文所涉及的内容(Contents)二.背景(Contexts)三.基礎知識(Rudimentary Knowledge)四.實作過程(Process)五.疑問(Questions)六.參考文獻(References)

(Figure8:之後建立時間)

注意:禁用即時檔案初始化功能,要想讓這個禁用生效,一樣需要重新開機SQL Server (MSSQLSERVER)服務。

1. 在安裝SQL Server的時候,如何設定會使得SQL Server服務是以【網絡服務】登陸的?

2. 禁用掉SQL Server的協定Shared Memory,這個協定是用來幹嘛的?有什麼作用?

3. 如果把NT AUTHORITY\NETWORKSERVICE加入到Windows組裡面有什麼不安全隐患嘛?

4. 當啟用 TDE 時,即時檔案初始化功能不可用。什麼是TDE?

<a href="http://msdn.microsoft.com/zh-cn/library/ms175935(SQL.105).aspx">資料庫檔案初始化</a>

<a href="http://database.ctocio.com.cn/dbzjdysummary/405/8314905.shtml">為SQL Server 2005配置Windows即時初始化</a>

<a href="http://hi.baidu.com/ayozr/item/8b27494b356ab10ac0161356">Local System/Network Service/Local Service權限詳解</a>