標籤:
我們在安裝SQL Server的時候會在指定SQL Server各個服務的運行啟動賬戶的賬戶的時候看到底下有一個選項寫著“Grant Perform Volume Maintenance Task privilege.....”。準確的說,這個東西不是SQL Server的東西,“Perform Volume Maintenance Task”許可權屬於Windows的安全性原則(Security Policy)範疇,這裡其實只是通過一個UI介面改了本地的Windows安全性原則。
那“Perform Volume Maintenance Task”是個什麼東西呢?它代表的是Windows作業系統的“Instant File Initialization”特性。意思就是在Windows作業系統下,檔案在被建立的時候是否執行“zeroing out”任務,也就是把檔案系統分配給某個檔案的空間都通過寫0來清楚原先的資料。開啟了檔案及時初始化後在Windows下我們刪除一個檔案其實並沒有把磁碟上的資料清除,而是留到下一次這部分空間被重新利用的時候才來複寫。而“Instant File Initialization”的意思就是不執行“zeroing out”任務。
優點:
那麼回到SQL Server來談這個東西,它的作用就是在SQL Server每次檔案被建立或者發生空間增長的時候不清楚舊資料,從而提高效能。這點會影響到CREATE DATABASE, ALTER DATABASE, RESTORE和AUTOGROWTH等情境。
缺點/風險:
安全風險是開啟檔案及時初始化的缺點。
局限性:
1)LOG檔案不適用。至於說為什麼LOG檔案不適用,其實也不難理解。資料檔案空間分配背後有GAM,SGAM, PFS以及內部表來支援資料空間的中繼資料驗證,自然不會犯錯,把原本不該是“屬於自己的資料”當成是自己的,即便這部分資料還留在檔案裡面。可是LOG不同,LOG檔案沒有這層的邏輯來支援它。
2)不能是疏鬆檔案,比如Snapshot,DBCC CHECKDB命令運行時產生的結果檔案(這個檔案是自動產生);
3) Transparent Data Encryption資料庫選項不能被開啟;
4)跟蹤標記(Trace Flag)1806不能被啟用。這個標記的作用就是關閉及時檔案初始化特性的。兩者相斥。
那如果在安裝的時候沒勾選那個選項,後面怎麼去啟用呢?
開啟安全性原則修改就行。也就是這樣SQL Server服務帳號具備許可權就自動啟用的SQL Server的檔案及時初始化。添加許可權需要重啟SQL Server服務,刪除許可權則需要重啟伺服器。
參考文獻:
SQL Server Premier Field Engineer Blog -- How and Why to Enable Instant File Initialization
SQL Server ->> Enable Instant File Initialization(開啟檔案及時初始化)