SQL SERVER – INSTANT FILE INITIALIZATION

Enes KAPLAN

Bu yazımızda sql server 2005 ile hayatımıza giren Instant File Initialization özelliğini anlatmaya çalışacağız. Kurulum esnasında bize öneri olarak sunulan bu özelliğin performans anlamında katkılarını örneklerle göreceğiz. Öncelikle bir veritabanı oluşturulduğunda, genişletildiğinde (auto growth) veya geri yüklendiğinde (restore) diskten alan talebinde bulunulur ve ilgili alan işletim sistemi tarafından kullanılmayan disk alanı ile doldurulur. Bu, disk üzerinde 0’larla doldurulması gereken bir işlem olup zaman alabilmektedir. IFI özelliği aktif olsaydı eğer sistemin belirli işlemler için alan ayırması gerektiğinde, data dosyaları için 0 ile doldurma işlemi yapılmadan istenilen alan tanımlanmış olacaktı. Böylece uzun zaman alacak işlemler kısa sürede tamamlanabilir. Ayrıca acil durumlarda kesinti süresi azaltılarak SQL Server performansında iyileştirme yapılır. Kurulum esnasında bu özelliği nasıl aktif edeceğimizi ve sonuçlarını görelim.

Görsel 1: egitim.local adında bir domaine bağlı sanal makine üzerinde testlerimi gerçekleştireceğim.

 

Görsel 2: Sql Server 2019 kurulumu Server Configuration sekmesine geldiğimizde “Grant Perform Volume Maintenance Task privilege to SQL Server Database Engine Service” alanını işaretlememiz IFI özelliğini aktif etmemiz için yeterlidir.  

 

Sql Server 2016’dan sonra kurulum aşamasında IFI aktif edilebilir. Bu noktada varsayılan olarak NT Service\MSSQLSERVER seçilebildiği gibi domain kullanıcısı da Account Name bölümüne girilebilmektedir. Burada dikkat edilmesi gereken nokta egitim\administrator kullanıcısının SQL Server için yetkili bir kullanıcı olmasıdır. IFI özelliğinin aktiflik durumunu Sql Server kurulumunu yaptıktan sonra farklı yollarla kontrol edebiliriz. Bu şekilde kurulumu gerçekleştirdikten sonra aşağıdaki sorguyu SSMS üzerinden çalıştırıyoruz.

 

Görsel 3: Sql Server IFI açık olması durumunda ‘Y’, kapalı durumda ‘N’ şeklinde değer döndürür.

 

Kurulum esnasında özelliği aktif etmeyi kaçırırsak eğer Windows çalıştır kısmına secpol.msc yazarak ilgili bölümden aktif edebiliriz.

Görsel 4: Local Security Policy Ekranı 

 

Görsel 5: Sql Server yetkili kullanıcısı ‘Add User or Group’ menüsünden eklenerek aktif hale getirilebilir.

Uyarı: İlgili kısım güncellendikten sonra Sql Server Configuration Manager kısmından servis restart edilmelidir.

Görsel 6: Sql Server 2019 yüklü sistemde çalıştır kısmına SQLServerManager15.msc yazarak ulaşılabilir.

 

Instant File Initialization özelliği kapalı olan bir makinede, 20 GB olacak şekilde test veritabanı oluşturalım ve işlemin ne kadar süreceğini test edelim.

Görsel 7: Instant File Initialization kapalı bir ortamda veritabanı oluşturma işlemi 25 saniyede tamamlandı.

 

Görsel 8: Instant File Initialization özelliğini aktif hale getirdik ve 1 saniyeden az bir sürede işlem tamamlandı.

 

Şimdi 10 gb bir veritabanını restore edebilmek için ne kadar süre gerekecek ona bakalım. Instant File Initialization özelliğinin kapalı olduğu durumda testimize başlayalım.

Görsel 9: 10 GB veri tabanının restore işlemi 22 saniyede tamamlandı.

 

Görsel 10: IFI özelliği aktif olan makinede 2.2 saniyede restore işlemi tamamlandı.

Transparent Data Encryption (TDE) mevcut veritabanlarında IFI aktif olsa dahi performans artışı sağlamaz. TDE veritabanının başka bir sunucuya kopyalanmasını veya restore işlemini önlemek için kullanılır. Hangi veritabanlarında TDE mevcut görmek için aşağıdaki sorgu kullanılabilir.

Görsel 11: Transparent Data Encryption mevcut olanlar is_encypted=1

 

TDE özelliğini veritabanına uygulamak için aşağıdaki sorguyu çalıştırabilirsiniz.

İlk olarak TDE aktif durumda DB10GB veritabanını 20 GB olacak şekilde güncelleyelim. Yukarıda paylaştığımız 20 GB veritabanı oluşturma sorgusunda boyut kısmını 10 GB olarak değiştirip teste başlayabilirsiniz.

Görsel 12: TDE özelliğinin aktif olduğu durumda growth işlemi için 9 saniye gerekti.

 

Görsel 13: TDE kullanılmayan durumda growth işlemi 26 ms içinde tamamlandı. IFI aktif olsa dahi istisnai durumlarda özelliğin kullanılmadığını görmüş olduk.

 

Peki bütün bu testler sonucunda IFI özelliğinin neden varsayılan olarak aktif olmadığını anlatmaya çalışalım. Güvenlik sebebiyle özelliğin aktif olması SQL Server tarafından bize bırakılmıştır. IFI özelliği kullanılırken disk alanı sıfırlanmaz demiştik böylece kullanılmayan veriler fiziksel olarak diskte kalabilir. Eğer bu disk sonradan başka bir kişi veya sistem tarafından kullanılırsa, bu verilere erişim sağlanabilir. Instant File Initialization aktif olması durumunda güvenlik önlemlerinin doğru bir şekilde uygulanması gerektiğini unutmayalım.

Bu yazımızda Instant File Initialization özelliğinin ne gibi farklılıklar oluşturabileceğini bazı testler üzerinden anlatmaya çalıştık. SQL Server kurulumunun best practice şeklinde tamamlanmasının ne kadar önemli olduğunu da kavramış olduk. Acil şekilde aksiyon alınması gereken durumlarda Instant File Initialization özelliği hayat kurtarıcı olabilir. Instant File Initialization özelliğinin, veritabanı dosyalarını boyutlandırırken veya oluştururken etkili olduğunu, ancak veritabanındaki verilerin silinmesi noktasında bir performans artışı sağlamayacağını da bilmeliyiz. Konuyla ilgili daha fazla bilgi için https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver16 adresini ziyaret edebilirsiniz.

“SQL SERVER – INSTANT FILE INITIALIZATION” üzerine bir yorum

  1. Enes Hocam bu değerli yazı için teşekkürler. Yakın zamanda kurulum sonrası IFI açılmadığı için Restore işlemlerinde normal zamanda bitmesi gerek zamandan daha uzun zamanda bitmişti.

    Cevapla

Yorum yapın