DELAYED DURABILITY

Bu makalede SQL Server2014 ile gelen bir özellik olan ilişkisel veri tabanlarının ortak bir özelliği olan Delayed Durability den bahsedeceğim. Bu özellik hakkında detaylı bir şekilde konuşmaya başlamadan önce tekrar etmemiz gereken bir özellik var o da bir verinin yazılmasının aşamaları. Veri öncelikle log file olan .ldf dosyasına yazılmadan (log flush), data file olan .mdf veya .ndf dosyalarına yazılma işlemi (page flushing) gerçekleşmez. Veri tabanına verinin yazılması sürecinde işlem commit edilerek bunun bilgisi kullanıcıya dönüş sağlanır ancak aksi bir durumda crash veya buna benzer durumlarda sql server veriyi log dosyasından recover edebileceği için verinin kaybolmamasının garantisini sağlamış olur. Bu aşamada makalemizin konusu olan Delayed Durability bize esneklik sağlayabilir. Kısaca açıklayacak olursak bu özellik sayesinde veri tabanına verinin yazılması sürecinde işlem commit edilmeden kullanıcıya sürecin tamamlandığı bilgisi veriliyor bu güzellik bir özellik gibi görünse de aslında bir dezavantaj aslında işlem tamamlanmış olmuyor bu özelliği kullanırken crash veya buna benzer durumlarda sql […]

DELAYED DURABILITY

Bu makalede SQL Server2014 ile gelen bir özellik olan ilişkisel veri tabanlarının ortak bir özelliği olan Delayed Durability den bahsedeceğim.

Bu özellik hakkında detaylı bir şekilde konuşmaya başlamadan önce tekrar etmemiz gereken bir özellik var o da bir verinin yazılmasının aşamaları. Veri öncelikle log file olan .ldf dosyasına yazılmadan (log flush), data file olan .mdf veya .ndf dosyalarına yazılma işlemi (page flushing) gerçekleşmez.

Veri tabanına verinin yazılması sürecinde işlem commit edilerek bunun bilgisi kullanıcıya dönüş sağlanır ancak aksi bir durumda crash veya buna benzer durumlarda sql server veriyi log dosyasından recover edebileceği için verinin kaybolmamasının garantisini sağlamış olur. Bu aşamada makalemizin konusu olan Delayed Durability bize esneklik sağlayabilir. Kısaca açıklayacak olursak bu özellik sayesinde veri tabanına verinin yazılması sürecinde işlem commit edilmeden kullanıcıya sürecin tamamlandığı bilgisi veriliyor bu güzellik bir özellik gibi görünse de aslında bir dezavantaj aslında işlem tamamlanmış olmuyor bu özelliği kullanırken crash veya buna benzer durumlarda sql server veriyi log dosyasından recover edemeyeceği için veri kaybı riskimiz ortaya çıkmış oluyor ancak bu özellik bize işlemleri beklemeksizin veriyi yazabilme yeteneği sunar buda özelliğimizin avantajı oluyor.

SQL Server 2016 ile birlikte Always On Availability Groups (AG) yapılandırmasında daha uyumlu çalışması sağlanmıştır. Bu geliştirmeler öncesinde primary ve secondary replika arasında log kayıtlarının doğru senkronizasyonunda sorunlar yaşanabiliyordu. SQL Server 2016 ve sonrasında Transaction log senkronizasyon mekanizmasında iyileştirmeler yapıldı log girişlerinin minimum kayıpla işlenmesi için yeni bir algoritma uygulanmıştır ancak veri kaybı riski tamamen ortadan kalkmaz. Asynchronous Commit modunda primary replikada bellek üzerinde bekleyen loglar, bir crash anında kaybolabilir.

SQL Server 2016 ve 2019 geliştirmeleri ile disk I/O operasyonları ve bellek kullanımındaki gecikmeler optimize edildi. Sistem görünümü ve izleme mekanizmaları geliştirilerek Query Store ve Extended Events kullanılarak Delayed Durability işlemleri daha iyi analiz edilebilir hale getirildi.

Şimdi veri tabanı seviyesinde Delayed Durability seçeneklerine göz atalım;

ALTER DATABASE DatabaseName SET DELAYED_DURABILITY = {DISABLED | ALLOWED | FORCED }

DISABLED, Default davranış şeklidir.

ALLOWED, Durability ‘nin kullanılabilir olarak belirlenmesidir.

FORCED, veri tabanına gelen tüm transactionların Delayed Durability zorlanması anlamına gelir.

Veri tabanınızda Durability ayarlarını değiştirdikten sonra tekrar kapatabilirsiniz, aşağıdaki script örneği ile,

ALTER DATABASE DatabaseName SET DELAYED_DURABILITY = DISABLED

Görsel – 1

Görsel – 2

Veri tabanınızda Durability ayarlarını script haricinde gösterdiğim adımları takip ederekte değiştirebilirsiniz.

Ayrıca yukarıda bahsetmiş olduğumuz log file (.ldf) dosyasına yazılmadan (log flush) işlemini kontrollerini Performance Monitor üzerinden kontrollerini sağlayabilirsiniz. MSSQL$Instance: Databases menüsü altından ilgili parametreleri ekleyerek ortamlarınızda değerlerinizin kontrollerini sağlayabilirsiniz.

Görsel – 3

Delayed Durability özelliğini aktifleştirmeden önce veri tabanı üzerindeki işlemlerin memory ‘den diske yazılma işleminin tamamlanmasını tetiklemek için aşağıda belirtmiş olduğum stored procedure kullanabilirsiniz.

use DatabaseName 
exec sys.sp_flush_log

Delayed Durability özelliğini aktifleştirme önce kendi ortam ve senaryolarınıza göre değerlendirmenizi tavsiye ederim, Always On bulunan bir ortamınızda bunu uygulayabilirsiniz veya bulk insert yaptığınız işlemlerde kullanabilirsiniz ancak performans olarak size bir katkıda bulunmasını istiyorsanız insert işlemlerinizin daha küçük hacimli olması gerekir ki bu özellikten maksimum faydayı sağlayabilesiniz.

İlişkisel veri tabanlarının ortak bir özelliği olan Delayed Durability den bahsettik, bir sonraki makalede görüşünceye dek iyi ki varsınız, sevgiler 😊

Benzer Yazılar

MSSQL Load(Stress) Test – II

SQL Server 2 hafta önce

SQL Server üzerinde yük oluşturarak kaynak kullanımlarını ve sql server’ın bu yük ile başa çıkma durumu incelenmek için zaman zaman bazı testler yapılır. Yük oluştururken Microsoft tool’u ile bunu yapmak isterseniz daha önce kaleme aldığımız MSSQL Load (Stress) Test adlı makalemize bakabilirsiniz. Bu testleri yapmak için birçok tool vardır. Bunlardan biri de Adam Mechanic’in yapmış olduğu SqlQuerryStress Tool’u dur. Bu tool ile istediğiniz sorguyu istediğiniz thread’de ve istediğiniz sayıda göndererek sistem üzerinde yük oluşturabilirsiniz. Bu başlık altında SqlQueryStress tool’un kullanım durumuna ve kullanım sonrasında Sql Server üzerindeki yükleri inceleyeceğiz. Öncelikle bu tool’u aşağıdaki linkten indirebilirsiniz. İndirdikten sonra exe’yi yönetici olarak çalıştırmanız tool’un başlatılması için yeterli olacaktır. Bu tool’u birden fazla kez açıp farklı sorgularda gönderebilirsiniz. https://github.com/ErikEJ/SqlQueryStress/releases Görsel-1 Görsel – 2 Görsel – 3 Exe’yi başlattığımızda yukarıdaki görsel bizi ilk olarak karşılayacaktır. Burada başlatmadan önce Database button’u ile yükü hangi server ve database üzerinde, hangi kullanıcı ile yapacağımız bilgisini girmemiz gerekmektedir. […]

MSSQL Load(Stress) Test

SQL Server 2 hafta önce

Bu yazıda SQL Server üzerinde yükler oluşturacağız, yük oluştururken SQL Server üzerindeki workload’ları inceleyeceğiz. SQL Server’da Yük Testi (Stress Testi) oluşturmak istediğimizde birçok tool önümüze çıkacaktır. Microsoft bu testi yapabilmemiz için bizimle RML Utilities Tool’unu paylaşmıştır. Öncelikle tool’u PC’inize kurmak ve yüklemek için aşağıdaki adımları takip etmelisiniz. Aşağıdaki linke girşi sağladıktan sonra downlaoda etmelisiniz. https://www.microsoft.com/en-us/download/details.aspx?id=103126 Görsel – 1 Görsel – 2 Kurulum başarılı şekilde tamamlandıktan sonra Tool’un aşağıdaki path’e kurulduğunu teyit edebilirsiniz. “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RML Utilities for SQL Server\” Görsel – 3   CMD’yi açtıktan sonra; aşağıdaki parametreleri kullanarak kendi yazmış olduğumuz sorguları stress testi için gönderebiliriz. Görsel – 4 Microsoft bu testi yaparken oStress komutunu kullanarak yapmaktadır. T-Sql query’lerin yük oluşturabilmesi için tasarlanmıştır. Bu sayede veritabanına ciddi bir yük bindirebilirsiniz. SQL Server üzerinde yük üretmek için bir database’e ihtiyacımız olacak. Biz bunun için AdventureWorks Veritabanını kullandık. Aşağıdaki link üzerinden bu Database’in backup’ını indirerek Restore edebilirsiniz. https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2022.bak Yük oluştururken 3 adet […]

Contained Availibility Group – SQL Server 2022 Feature

SQL Server 2 hafta önce

Contained Availibility Group – SQL Server 2022 Feature Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz. SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi. Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız. 1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz. Görsel 1: New Availability Group Wizard   2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız. Görsel 2: New Availability Group as Contained   3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız. Görsel 3: […]

0 Yorum

Yorum Yaz

Rastgele