SQL server 啟用 IFI 功能
今天早上 Data warehouse 部門的人告訴我平常的 Data loading時間還算正常,但是昨天晚上的 loading 時間比一般平常的時間長很多,是不是資料庫有什麼問題?
我仔細檢查了一下資料庫,發現昨天的資料檔案 MDF file 已經滿了,資料庫自動加了 10GB 來增大這一個資料檔案。我又跟著進一步檢查 IFI 的設定,發現這個設定沒有被啟用。幾乎可以肯定這個就是問題的所在.
什麼是 IFI 呢?IFI 就是 Instant file initialization. 當資料庫要取得磁碟空間來擴增資料檔案的時候,系統會把取得的磁碟空間一個一個的用 數字 0 把它填滿,稱為 “zero out the disk”. 如果是小小的 1MB,可能不痛不癢。但如果是10 GB 或是更大的磁碟空間,那就要花一段時間來等待系統用數字 0 填滿磁碟. 如果資料庫啟用 IFI 的話,SQL server 就會省略這個 zero out 的過程。相對的,資料庫就不用靜置在那裡等待這個過程的完成.所以一般來講,在設定資料庫的時候,尤其是資料倉儲,都會啟用 IFI 的功能。
但是啟用這個功能都沒有什麼缺點嗎?答案是有的,會有資料安全考量的問題。因為省略了 zero out disk 的動作,所以新取得的磁碟空間不會被完全刪除乾淨。有心人士是可以透過特別的方法來讀取那些原本該被刪除的資料。所以有 security 的考量。但很多事情都有優缺點,還是需要衡量利與弊的比重,來做最佳的設定選擇。