SQL Server üzerinde yeni bir veritabanı oluşturduğunuzda, mevcut bir veritabanını geri yüklediğinizde (Restore) veya bir dosya otomatik olarak büyüdüğünde (Autogrow), SQL Server işletim sisteminden yer talep eder. Normal şartlarda işletim sistemi, bu alanın güvenliği için diskteki eski verileri temizlemek adına o alanı “sıfırlar” (Zero-filling). İşte Instant File Initialization (IFI), bu sıfırlama işlemini atlayarak dosyaların anında oluşturulmasını sağlayan kritik bir özelliktir.
Geleneksel yöntemde, 100 GB’lık bir veritabanı dosyası oluşturmak istediğinizde, SQL Server disk üzerine 100 GB boyunca “0” yazar. Bu işlem sırasında disk I/O kapasitesi tamamen meşgul edilir ve işlem bitene kadar veritabanı erişime açılmaz.
Bu özellik açık olduğunda SQL Server, işletim sistemine “Bu alanı bana ayır ama içini sıfırlama, ben üzerine veri yazdıkça zaten eskiler silinecek” der. Sonuç olarak, 100 GB’lık bir dosyanın oluşturulma süresi dakikalardan milisaniyelere düşer.
SQL Server’da IFI (Instant File Initialization) açılmadığında, özellikle veri dosyaları (MDF, NDF) ve transaction log dosyaları (LDF) oluşturulurken veya büyütülürken, disk alanı işletim sistemi tarafından sıfırlarla doldurulur. Bu, dosya tahsis işlemini yavaşlatır ve özellikle büyük dosyalarda performans kaybına neden olabilir.
IFI Açılmadığında Ne Olur?
- Yeni veritabanı oluşturma işlemleri yavaşlar.
- Veritabanı dosyaları büyütüldüğünde performans düşer. (Otomatik büyüme veya manuel genişletme sırasında.)
- Backup restore işlemleri daha uzun sürer.
IFI’nın Sağladığı Avantajlar
- Hızlı Restore: Büyük yedekleme dosyalarınızın geri yükleme süresi (Data File oluşturma aşaması) inanılmaz derecede kısalır.
- Kesintisiz Autogrow: Veritabanı dosyası aniden büyüdüğünde oluşan o birkaç saniyelik “donma” (freeze) hissi ortadan kalkar.
- Daha Hızlı Kurulum: TempDB dosyalarının servis başlangıcında hızlıca oluşturulmasını sağlar.
IFI Açmak için Ne Yapılmalı: IFI’yi etkinleştirmek için SQL Server çalıştıran Windows kullanıcısına “Perform Volume Maintenance Tasks” izni verilmelidir:
Windows arama yerine Run yazıyoruz. Gelen ekranda secpol.msc yazarak Local Security Policy bölümüne giriyoruz. Gelen ekranda Local Policies bölümünden Perform volume maintenance tasks kısmına girilir. Şimdi sql server servis hesabının nasıl yetkilendirildiğini görelim

Bu özellik aktif hale getirildiğinde SQL Server’a ait data dosyaları üzerinde yapılacak işlemlerin daha hızlı bir şekilde gerçekleştirilmesi sağlanmış olur. Veritabanı oluşturma, veritabanına data file ekleme, veritabanının data file boyutunu arttırma ya da autogrowth ile bu işlemin gerçekleşmesi, olmayan bir veritabanını restore etmek işlemlerinden herhangi biri gerçekleştiğinde SQL Server tarafından file allocation isteği gelir. Allocate edilmesi istenen bu alanlar 0’lar ile doldurulur ve daha sonra sql server’a tahsis edilir. Tabi büyük işlemlerde tahsis edilmesi istenen alanların 0 ile doldurulması biraz zaman alır. SQL Server Servis hesabına Windows üzerinde, perform volume maintenance tasks için gerekli yetki verildiği takdirde, sql server’dan file allocation isteği geldiğinde data dosyaları için 0 ile doldurma işlemi yapılmadan istenilen alan sql server’a tahsis edilir. Bu şekilde istenilen alan’ın 0 ile doldurulmasıyla geçecek süre kazanılmış olur. Sunucu üzerinde silinen alanlar deleted olarak işaretlenir. Sonra sql server yeni bir alana ihtiyaç duyduğu zaman bu boş olan bu deleted olanları sql server 0 ile doldurmadan kullanır. Bu işlem daha çok log dosyaları üzerinden etkili olmaktadır. Disk ilk konumunda bu alanlar sıfır ile doludur zaten. Disk üzerinde normal silme işlemlerinden sonra silinen alanlar için deleted olarak işaretleniyor. Tekrardan sıfırla dolum işlemleri yapılmıyor. Şimdi Instant File Initialization ’ı aktif hale getirdiğimizde yukarıdaki belirttiğimiz işlemler üzerindeki etkisini test edebiliriz. Bu konfigürasyonlar sonucu saatlerce süren işlemler dakikalar mertebesine inmektedir.
Bu özellik aktif hale getirildiğinde SQL Server’a ait data dosyaları üzerinde yapılacak işlemlerin daha hızlı bir şekilde gerçekleştirilmesi sağlanmış olur.

Perform volume maintenance tasks bölümüne tıkladıktan sonra Add User or Group kısmından sql server servis hesabını ekliyorum. Sql Server Servisi Restart ederek işlemler tamamlanır.

Performans anlamında bize çok büyük katkıları olmaktadır. Katkılarının yanında dezavantajlarıda vardır. Perform Volume Maintenance Task üzerinde SQL Server Servis hesabını yetkilendirdiğimizde, sql server tarafından talep edilen disk allocation anında, talep edilen alanın 0’lar ile doldurulmadan sql server’a tahsis edilir. Ama sql server tarafından alınan bu alan üzerinde oluşan data silindiğinde üzerine 0 yazılmadan tekrar windows’a iadesi yapılıyor.
IFI kullanmanın tek bir yan etkisi vardır: Veri Güvenliği. Bir dosya sıfırlanmadan oluşturulduğu için, o disk alanında daha önceden silinmiş olan başka verilere (bir Word belgesi veya başka bir dosyanın kalıntısı) teorik olarak erişilebilir. Ancak bu verilere sadece SQL Server Admin yetkisi olanlar erişebileceği için genellikle kurumsal sistemlerde bu durum bir risk olarak kabul edilmez.
IFI, özellikle büyük ölçekli veritabanlarında ASYNC_IO_COMPLETION beklemelerini azaltmak ve acil durumlarda (Felaket kurtarma gibi) restore sürelerini minimize etmek için mutlaka açık olmalıdır.
Başka makalede görüşmek dileğiyle..
Kötülüğe iyilikle karşılık verin.Fussilet-34
