SQL SERVER – INSTANT FILE INITIALIZATION

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.     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 – INSTANT FILE INITIALIZATION

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.

İçindekiler

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.

 

SELECT servicename, instant_file_initialization_enabled
FROM sys.dm_server_services
WHERE servicename like 'SQL Server (%';

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.

CREATE DATABASE [DB20GB]
ON PRIMARY
(NAME = N'DB20GB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB20GB.mdf', SIZE = 20GB , FILEGROWTH = 1GB )
LOG ON
(NAME= N'DB20GB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB20GB_log.ldf', SIZE = 256MB , FILEGROWTH = 256MB )

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

 

set statistics time on

CREATE DATABASE [DB20GB] ON PRIMARY (NAME = N'DB20GB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB20GB.mdf', SIZE = 20GB , FILEGROWTH = 1GB )

LOG ON (NAME= N'DB20GB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB20GB_log.ldf', SIZE = 256MB , FILEGROWTH = 256MB )

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.

RESTORE DATABASE [DB10GB_Restore]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\DB10GB.bak' WITH FILE = 1, 
MOVE N'DB10GB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB10GB_Restore.mdf', 
MOVE N'DB10GB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB10GB_Restore_log.ldf', NOUNLOAD, STATS = 5

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

 

SET STATISTICS TIME on
RESTORE DATABASE [DB10GB_Restore]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\DB10GB.bak' WITH FILE = 1,
MOVE N'DB10GB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB10GB_Restore.mdf',
MOVE N'DB10GB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB10GB_Restore_log.ldf', NOUNLOAD, STATS = 5

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.

SELECT
db.name,
db.is_encrypted,
dm.encryption_state,
dm.percent_complete,
dm.key_algorithm,
dm.key_length
FROM
sys.databases db
LEFT OUTER JOIN sys.dm_database_encryption_keys dm
ON db.database_id = dm.database_id;

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.

USE master;
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD='!Verit@b@ni.01';
GO

CREATE CERTIFICATE TDECert
WITH
SUBJECT='DB_Encryption';
GO

USE DB10GB
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO

ALTER DATABASE DB10GB
SET ENCRYPTION ON;
GO

İ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.

set statistics time on
use [master]
GO
ALTER DATABASE [DB10GB] MODIFY FILE ( NAME = N'DB10GB' , SIZE = 20GB )
GO

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.

Benzer Yazılar

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

2 Yorum

Yorum Yaz

Rastgele