SQL server 啟用 IFI 功能 - 心得分享

SQL server 啟用 IFI 功能

DBA Bootcamp

今天早上 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 的考量。但很多事情都有優缺點,還是需要衡量利與弊的比重,來做最佳的設定選擇。