İÇİNDEKİLER
- •Restore ve dosya büyümeleri neden bu kadar uzun sürüyor?
- •Instant File Initialization Nedir?
- •IFI Hangi İşlemleri Hızlandırır?
- •IFI’ın Hızlandırmadıkları
- •Güvenlik Ödünleşimi
- •IFI Açık mı? Nasıl Kontrol Edilir?
- •Instant File Initialization Nasıl Açılır?
- •Kurulum sırasında
- •Mevcut bir sunucuda
- •Hakkı komut satırından kontrol etmek
- •Gerçekten Çalıştığını Test Etmek
- •Sanal Makineler ve Bulut
- •Instant File Initialization Kontrol Listesi
- •Restore ve büyüme sürelerini kısaltın
SQL Server yeni bir veri dosyası oluşturduğunda ya da mevcut bir dosyayı büyüttüğünde, varsayılan olarak ayırdığı alanın tamamını önce sıfırlarla doldurur. Birkaç megabaytlık bir büyümede bu fark edilmez. Ancak yüzlerce gigabaytlık bir restore’da, gece yarısı tetiklenen büyük bir autogrowth’ta ya da kesinti sırasında yeniden oluşturulan bir veritabanında, sunucu dakikalarca yalnızca diske sıfır yazar ve bu sürede iş beklemede kalır.
Instant File Initialization (IFI, anında dosya başlatma) bu sıfırlama adımını veri dosyaları için ortadan kaldıran Windows özelliğidir. Bu rehberde IFI’ın tam olarak neyi hızlandırdığını, neyi hızlandırmadığını, güvenlik tarafındaki ödünleşimi, nasıl açılacağını ve gerçekten çalıştığının nasıl doğrulanacağını anlatıyoruz.
Restore ve dosya büyümeleri neden bu kadar uzun sürüyor?
Aryasoft; Instant File Initialization, autogrowth, disk yerleşimi ve servis hesabı haklarını birlikte inceler, restore sürelerinizi ve RTO hedefinizi ölçülebilir şekilde kısaltır.
Instant File Initialization Nedir?
Windows, bir dosyaya yeni alan ayırırken o alanda daha önce silinmiş verilerin kalıntıları bulunabilir. SQL Server bu kalıntıların okunmasını önlemek için, varsayılan olarak yeni ayrılan alanı sıfırlarla doldurur. Bu işleme zeroing denir ve süresi doğrudan dosya boyutuna ve diskin yazma hızına bağlıdır.
SQL Server servis hesabı Windows’taki Perform volume maintenance tasks hakkına (SE_MANAGE_VOLUME_NAME ayrıcalığına) sahip olduğunda, SQL Server veri dosyaları için bu adımı atlar. Alan anında ayrılır, eski disk içeriğinin üzerine ancak yeni veri yazıldıkça yazılır.
Basit bir hesap farkı gösterir: saniyede 500 MB yazabilen bir depolamada 100 GB’lık bir veri dosyasını sıfırlamak yaklaşık 200 saniye, 1 TB’lık bir dosyayı sıfırlamak ise yarım saatten fazla sürer. IFI açıkken bu süre birkaç saniyeye iner.
IFI Hangi İşlemleri Hızlandırır?
Sıfırlama, veri dosyaları için şu işlemlerde devreye girer ve IFI hepsinde fark yaratır:
- Veritabanı oluşturma: Büyük bir başlangıç boyutuyla oluşturulan veritabanları anında hazır olur.
- Mevcut veritabanına dosya ekleme: Yeni bir veri dosyası ya da filegroup eklemek beklemeye yol açmaz.
- Dosya büyütme: Hem elle yapılan büyütmeler hem de autogrowth olayları. Autogrowth’u tetikleyen oturum, büyüme bitene kadar bekler; IFI olmadan büyük bir büyüme adımı, uygulama tarafında ani zaman aşımları olarak görünür.
- Restore: SQL Server veriyi kopyalamaya başlamadan önce hedef dosyaları oluşturur. IFI olmadan büyük bir veritabanının restore’u, tek bir sayfa veri okunmadan önce uzun bir sıfırlama aşamasıyla başlar. Bu, felaket anında RTO’nuzu doğrudan uzatır.
- TempDB: TempDB her servis başlangıcında yeniden oluşturulur. Büyük ön boyutlandırılmış TempDB veri dosyaları IFI ile çok daha hızlı hazır olur.
IFI’ın Hızlandırmadıkları
- Transaction log dosyaları: Log dosyaları SQL Server’ın log yapısı gereği sıfırlanmak zorundadır. Log dosyası oluşturma, büyütme ve restore sırasında log dosyasının oluşturulması IFI’dan yararlanmaz.
- TDE ile şifrelenmiş veritabanları: Transparent Data Encryption açık olan bir veritabanında veri dosyaları da IFI’dan yararlanamaz.
- Yavaş sorgular: IFI günlük sorgu performansını değiştirmez; yalnızca dosya ayırma anındaki bekleme süresini ortadan kaldırır.
Not
SQL Server 2022 ve sonrasında, 64 MB’a kadar olan transaction log büyümeleri de anında başlatmadan yararlanabilir. Yeni veritabanlarında log autogrowth varsayılanı da 64 MB’tır. Daha büyük log büyümeleri hâlâ sıfırlanır; bu yüzden log dosyasını baştan doğru boyutlandırmak ve büyüme adımını bilinçli seçmek önemini korur. Ayrıntılar için autogrowth rehberimize bakabilirsiniz.
Güvenlik Ödünleşimi
IFI açıkken yeni ayrılan alan sıfırlanmadığı için, diskte daha önce silinmiş içerik, o bölgeye yeni veri yazılana kadar veri dosyasının içinde fiziksel olarak durmaya devam eder. Teoride, veri dosyasına doğrudan erişebilen biri bu kalıntıları okuyabilir.
Pratikte risk şu koşullarla sınırlanır:
- Veri dosyalarının bulunduğu klasörlere yalnızca SQL Server servis hesabı ve yöneticiler erişebilmelidir.
- Detach edilmiş veri dosyaları ve yedek dosyaları da kısıtlayıcı izinlerle saklanmalıdır.
- Sunucu, fiziksel ve mantıksal olarak güvenli bir ortamda olmalıdır.
Bu koşullar sağlandığında performans kazancı riske ağır basar ve IFI üretim sunucuları için önerilen standart ayardır. Yüksek güvenlik gereksinimi olan ve silinmiş içeriğin ifşasının kabul edilemez olduğu ortamlarda IFI kapalı bırakılabilir ya da TDE kullanılabilir. Dosya ve klasör izinlerinin genel çerçevesi için SQL Server güvenlik sıkılaştırma rehberimize göz atabilirsiniz.
IFI Açık mı? Nasıl Kontrol Edilir?
Güncel sürümlerde (SQL Server 2016 SP1 ve sonrası) en kolay yol, servis bilgisini döndüren DMV’dir:
SELECT servicename,
service_account,
instant_file_initialization_enabled -- Y = açık, N = kapalı
FROM sys.dm_server_services
WHERE servicename LIKE N'SQL Server (%';
SQL Server aynı bilgiyi her başlangıçta error log’a da yazar:
EXEC sys.xp_readerrorlog 0, 1, N'Database Instant File Initialization';
Sonuçta “Database Instant File Initialization: enabled” ya da “disabled” satırını görürsünüz.
Instant File Initialization Nasıl Açılır?
Kurulum sırasında
SQL Server 2016 ve sonrasında kurulum sihirbazının Server Configuration adımında Grant Perform Volume Maintenance Task privilege to SQL Server Database Engine Service seçeneği bulunur. Yeni kurulumlarda bu kutuyu işaretlemek en temiz yoldur. Komut satırından kurulumda aynı işi /SQLSVCINSTANTFILEINIT="True" parametresi yapar.
Mevcut bir sunucuda
1. Servis hesabını bulun. Yukarıdaki DMV sorgusunun service_account sütunu ya da SQL Server Configuration Manager’daki SQL Server Services ekranının Log On As sütunu, Database Engine servisinin hangi hesapla çalıştığını gösterir. Sanal hesapla kurulmuş varsayılan bir instance için bu NT Service\MSSQLSERVER, adlandırılmış bir instance için NT Service\MSSQL$InstanceAdı olur.

2. Hakkı verin.
secpol.msc(Local Security Policy) ya dagpedit.msckonsolunu yönetici olarak açın.- Computer Configuration › Windows Settings › Security Settings › Local Policies › User Rights Assignment yoluna gidin.
- Perform volume maintenance tasks ilkesini açın ve Add User or Group ile 1. adımdaki servis hesabını ekleyin. Sanal hesap için konumun yerel bilgisayar olduğundan emin olun.

3. SQL Server servisini yeniden başlatın. Ayrıcalık servis başladığında okunur. Yeniden başlatmayı bakım penceresine planlayın; Always On Availability Group ya da failover cluster ortamında hakkı her düğümde verin ve düğümleri sırayla yeniden başlatın.
Uyarı
Perform volume maintenance tasks hakkı bir domain Group Policy’sinde tanımlıysa, bir sonraki ilke yenilemesinde domain ilkesi yerel ayarın üzerine yazar ve yaptığınız değişiklik sessizce kaybolur. Domain ortamlarında gpresult /h rapor.html ile bu hakkı bir GPO’nun yönetip yönetmediğini kontrol edin ve servis hesabını o GPO’ya ekletin. Sunucu başka bir OU’ya taşındığında ya da migration ile yenisi kurulduğunda da aynı kontrolü yapın.
Hakkı komut satırından kontrol etmek
# Yerel güvenlik ilkesini dışa aktarıp ayrıcalığı arayın
secedit /export /cfg "$env:TEMP\secpol.cfg" /areas USER_RIGHTS | Out-Null
Select-String -Path "$env:TEMP\secpol.cfg" -Pattern 'SeManageVolumePrivilege'
Çıktıda hesaplar SID olarak listelenir (sanal servis hesapları için *S-1-5-80-... biçiminde). Servis hesabını doğrudan değil de yerel Administrators grubu üzerinden yetkilendirmek de IFI’ı açar, ancak servis hesabını yönetici yapmak en az yetki ilkesine aykırıdır; hakkı doğrudan servis hesabına verin.
Gerçekten Çalıştığını Test Etmek
DMV “Y” dese bile, sıfırlamanın gerçekten atlandığını görmek isterseniz trace flag 3004 ve 3605 ile dosya sıfırlama mesajlarını error log’a yazdırabilirsiniz. Bu testi üretimde değil, test ya da bakım ortamında yapın:
DBCC TRACEON (3004, 3605, -1); -- sıfırlama işlemlerini error log'a yaz
CREATE DATABASE IFI_Test
ON (NAME = IFI_Test_data, FILENAME = N'D:\SQLData\IFI_Test.mdf', SIZE = 1GB)
LOG ON (NAME = IFI_Test_log, FILENAME = N'L:\SQLLog\IFI_Test.ldf', SIZE = 64MB);
EXEC sys.xp_readerrorlog 0, 1, N'Zeroing';
DBCC TRACEOFF (3004, 3605, -1);
DROP DATABASE IFI_Test;
IFI açıksa error log’da yalnızca .ldf dosyası için “Zeroing …” satırı görürsünüz. .mdf için de bir satır görüyorsanız IFI çalışmıyordur: servis hesabını, yeniden başlatmayı ve GPO’yu kontrol edin. Dosya yollarını kendi ortamınıza göre değiştirmeyi unutmayın.
Sanal Makineler ve Bulut
IFI, sanal makinelerde de fiziksel sunuculardaki gibi çalışır ve aynı kazancı sağlar; depolamanın paylaşımlı ve görece yavaş olduğu ortamlarda kazanç daha da belirgindir. Microsoft’un Azure sanal makinelerinde SQL Server için yayımladığı en iyi uygulamalar kontrol listesi de veri dosyaları için IFI’ın açılmasını önerir. Azure SQL Database ve Azure SQL Managed Instance’ta bu ayar platform tarafından yönetilir.
Instant File Initialization Kontrol Listesi
sys.dm_server_servicesiçindeinstant_file_initialization_enabled = 'Y'.- Hak, servis hesabına doğrudan verilmiş; servis hesabı yerel yönetici değil.
- Domain ortamında hak, sunucunun OU’sunu yöneten GPO’da tanımlı.
- Always On ve cluster ortamlarında her düğüm kontrol edilmiş.
- Veri, log ve yedek klasörlerinin izinleri kısıtlı.
- Log dosyaları baştan doğru boyutlandırılmış, log büyüme adımı bilinçli seçilmiş.
- Yeni sunucu kurulum kontrol listesinde IFI seçeneği yer alıyor.
İlgili Yazılar
- SQL Server Autogrowth Ayarları: Veri ve Log Dosyası Büyümesi Nasıl Ayarlanır?
- SQL Server Restore Rehberi: SSMS ve T-SQL ile Veritabanı Geri Yükleme
- SQL Server TempDB Best Practice’leri: Dosya Sayısı, Boyut, Contention ve İzleme
- SQL Server Lock Pages in Memory: Ne Zaman Açılır, Nasıl Verilir, Nasıl Doğrulanır?
SQL Server Performans Danışmanlığı
Restore ve büyüme sürelerini kısaltın
Aryasoft’un kıdemli DBA ekibi; Instant File Initialization, Lock Pages in Memory, autogrowth ve disk yerleşimini her düğümde doğru ilkeyle yapılandırır, sonucu yeniden başlatma sonrasında doğrular.