Instant File Initialization

Instant File Initialization  SQL Server 2005 ve Windows Server 2003-Windows XP ile gelen bir özelliktir. Bu özelliği aktif hale getirebilmek için Windows üzerinde SQL Server servis hesabına gerekli yetkilerin verilmesi gerekir. 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. 
 
SQL Server üzerinde; 
 
1. Veritabanı oluşturma, 
2. Var olan bir veritabanına data file ekleme, 
3. Var olan bir veritabanının data file boyutunu arttırma ya da autogrowth ile bu işlemin gerçekleşmesi,
4. Var olmayan bir veritabanını restore etmek 
 
işlemlerinden herhangi biri gerçekleştiğinde SQL Server tarafından file allocation isteği gelir. Ve 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. Şimdi Instant File Initialization ’ı aktif hale getirdiğimizde yukarıdaki işlemler üzerindeki etkisini test edelim. İşlemlerimizi öncelikle pasif haldeyken gerçekleştirip sürelerini kaydedelim. Daha sonra aktif hale getirip ne kadar hızlandığına bakalım.
 
Testleri gerçekleştirdiğim sunucuya ait CPU:  Intel Xeon X5670, 2.93GHz,2933Mhz, 8 Core(s)
 
1. Veritabanı oluşturma;
 
Test ortamımda aşağıdaki komutla Instant File Initialization aktif değilken boyutu 50 GB olan yeni bir veritabanı oluşturduğumda 5 dakika 18 saniye sürdü. Tabi işlemi gerçekleştirdiğiniz sunucunun gücüne göre bu süre artıp azalabilir.
 
CREATE DATABASE [CreateDatabase100GB]
 CONTAINMENT = NONE
 ON  PRIMARY
( NAME = N'CreateDatabase100GB', FILENAME = N'H:\CreateDatabase100GB.mdf' , SIZE = 104857600KB , FILEGROWTH = 1048576KB )
 LOG ON
( NAME = N'CreateDatabase100GB_log', FILENAME = N'H:\CreateDatabase100GB_log.ldf' , SIZE = 262144KB , FILEGROWTH = 262144KB )
GO

Instant File Initialization ’ı aktif hale getirden sonra ise aynı işlem aşağıda da görüldüğü gibi 3 saniye sürdü.

2. Var olan bir veritabanına data file ekleme;

Oluşturduğumuz CreateDatabase100GB veritabanına 20 gb boyutu olan bir data file ekleyelim.

Instant File Initialization aktif değilken bu işlemi gerçekleştirdiğimde 1 dakika 1 saniye sürdü.

USE [master]
GO
ALTER DATABASE [CreateDatabase100GB] ADD FILE ( NAME = N'CreateDatabase100GB_2',
FILENAME = N'H:\CreateDatabase100GB_2.ndf' , SIZE = 20971520KB , FILEGROWTH = 1048576KB )
TO FILEGROUP [PRIMARY]
GO

Instant File Initialization ’ı aktif hale getirden sonra ise aynı işlem aşağıda da görüldüğü gibi 1 saniyeden daha kısa bir sürede tamamlandı.

3. Var olan bir veritabanının data file boyutunu arttırma ya da autogrowth ile bu işlemin gerçekleşmesi;

CreateDatabase100GB_2 olarak eklediğimiz file’ın boyutunu 30 gb arttırmamız Instant File Initialization

aktif değilken 1 dakika 42 saniye sürdü.

Instant File Initialization ’ı aktif hale getirden sonra ise aynı işlem aşağıda da görüldüğü gibi 1 saniyeden daha kısa bir sürede tamamlandı.

4. Var olmayan bir veritabanını restore etmek;

CreateDatabase100GB olarak oluşturduğumuz veritabanının son hali 150 GB oldu. Şimdi bu veritabanının backup’ını alıp silelim. Instant File Initialization aktif değilken bu backup’ı restore ettiğimizde 12 dakika 1 saniye sürdü.

Instant File Initialization ’ı aktif hale getirden sonra ise aynı işlem aşağıda da görüldüğü gibi 3 saniye sürdü.

SQL Server Servis Hesabını Perform Volume Maintenance Tasks Üzerinde Yetkilendirmek:

Başlangıç’tan search program and files kısmına aşağıda görüldüğü gibi gpedit.msc yazıyoruz.

Daha sonra açılan Local Group Policy Editor’den sırasıyla, Computer Configuration->Windows Settings->Security Settings->Local Policies->User Rights Assingment seçilir. Daha sonra Perform Volume Maintenance Tasks üzerinde sağ tıklanarak properties seçilir.

Açılan pencerede add user or group tıklanarak sql server servis hesabına gerekli yetki verilmiş olur. SQL Server Servis hesabını restart ederek bu işlem tamamlanır. Tabi sistemin çalışmadığı bir zaman diliminde bu işlemi yapmak gerekir.

Instant File Initialization  aktif hale getirilirse beraberinde getireceği güvenlik riskleri:

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 edildiğini konuşmuştuk. 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. Ve Data üzerinde encryption yoksa sunucu üzerinde yetkili biri çeşitli tool’ları kullanarak SQL Server’ın iade ettiği bu alanı okuyabilir. 

Loading

Leave Your Comment