(5.2.1)配置服务器参数——即时文件初始化(IFI)
關鍵詞:零填充,即時文件初始化,IFI
轉自:https://www.cnblogs.com/gaizai/p/3516905.html
?
概念:
所有新申請的空間,sql server都要以0來填充完磁盤文件數據,以便造成安全隱患可以查看到只是邏輯刪除的舊數據。
初始化數據和日志文件以覆蓋之前刪除的文件遺留在磁盤上的任何現有數據。?執行以下其中一項操作時,應首先通過零填充(用零填充)數據和日志文件來初始化這些文件:
- 創建數據庫。
- 向現有數據庫添加數據或日志文件。
- 增大現有文件的大小(包括自動增長操作)。
- 還原數據庫或文件組。
文件初始化會導致這些操作花費更多時間。?但是,首次將數據寫入文件后,操作系統就不必用零來填充文件。
?
一.本文所涉及的內容(Contents)
二.背景(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組的;
(Figure1:gpedit.msc)
(Figure2:執行卷維護任務)
接著運行services.msc進入服務設置,查看到SQL Server (MSSQLSERVER)的登陸用戶是【網絡服務】(如Figure3所示),這就是造成初始化40GB文件花費了30多分鐘的原因了,因為【網絡服務】不具備SE_MANAGE_VOLUME_NAME的權限(可查看Administrators組成員);
(Figure3:SQL Server (MSSQLSERVER))
雙擊SQL Server (MSSQLSERVER)服務進入設置,在登陸的選項卡中可以看到帳號是:NT AUTHORITY\NETWORKSERVICE,如Figure4所示。
(Figure4:NT AUTHORITY\NETWORKSERVICE)
直接勾選【本地系統帳號】,在重啟SQL Server (MSSQLSERVER)時遇到了下圖的錯誤:
(Figure5:重啟服務報錯)
查看了相關的系統事件日志,在SQL Server服務無法使用管理員身份啟動?中解決了(禁用掉SQL Server的協議Shared Memory),設置完之后重啟服務SQL Server (MSSQLSERVER)。
而另外一種思路就是把NT AUTHORITY\NETWORKSERVICE加入到Administrators組中,如Figure6所示。注意:這種方式一樣需要重啟SQL Server (MSSQLSERVER)服務。
(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(Figure7:之前創建時間)
(Figure8:之后創建時間)
注意:禁用即時文件初始化功能,要想讓這個禁用生效,一樣需要重啟SQL Server (MSSQLSERVER)服務。
五.疑問(Questions)
1. 在安裝SQL Server的時候,如何設置會使得SQL Server服務是以【網絡服務】登陸的?
2. 禁用掉SQL Server的協議Shared Memory,這個協議是用來干嘛的?有什么作用?
3. 如果把NT AUTHORITY\NETWORKSERVICE加入到Windows組里面有什么不安全隱患嘛?
4. 當啟用 TDE 時,即時文件初始化功能不可用。什么是TDE?
5.如何禁用IFI 即時文件初始化?
?
1. 在安裝SQL Server的時候,如何設置會使得SQL Server服務是以【網絡服務】登陸的?默認就是 2. 禁用掉SQL Server的協議Shared Memory,這個協議是用來干嘛的?有什么作用? 本地登錄可以不開TCP連接 遠程無影響 3. 如果把NT AUTHORITY\NETWORKSERVICE加入到Windows組里面有什么不安全隱患嘛?巨大安全隱患,因為IIS等用戶都是再NETWORKSERVICE攻破任何一個網絡服務就掌握操作系統最高權限4.TDE是透明數據加密,SQLServer2008以上版本的新功能http://msdn.microsoft.com/zh-cn/library/bb934049.aspx
5.禁用IFI
(1)把上述操作撤銷修改
(2)Trace Flag 1806 --禁用即時文件初始化,所有的磁盤空間請求全部使用填0初始化,可能造成在空間增長時產生阻塞。
?
六.參考文獻(References)
數據庫文件初始化
為SQL Server 2005配置Windows即時初始化
Local System/Network Service/Local Service權限詳解
轉載于:https://www.cnblogs.com/gered/p/11083424.html
總結
以上是生活随笔為你收集整理的(5.2.1)配置服务器参数——即时文件初始化(IFI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 张恩民谈程序员“三点式” 学习方法
- 下一篇: ASP.NET 实现快递单的打印及套打