SQL Server’da With No Lock Nedir?

Herkese merhaba. Bu yazıda SQL Server’da With No Lock ifadesinin ne olduğu ile ilgili bilgi paylaşacağım.

SQL Server’da  herhangi bir tabloda kayıt üzerinde yapılan işlem sonucunda işlem sonlanana kadar server SQL Server tarafından kilitlenir ve bu işlem sonlanana kadar başka bir kullanıcının bu tablo üzerinde işlem yapılması engellenir. Böylece aynı kayıt üzerinde kullanıcıların yaptığı işlemlerin çakışmaması için işlem sonucunda diğer kullanıcıya kilitlenen tablo açılarak kullanıcıya bir sonraki işlem için izin verilir. Küçük projelerde bu aralığı anlamanız imkansız ama aynı anda 1000’lerce işlem yapan projelerde bu farkı hissetmeniz mümkündür.

SQL Server’da “WITH NOLOCK” komutu, bir sorguda kullanıldığında, ilgili tabloların okunmasının kilitleme olmadan yapılmasını sağlar. Bu komut, bir “okuma işlemi” sırasında diğer işlemler tarafından yapılacak değişikliklerin sonucunda oluşabilecek bir kilitlenme durumunu önlemek için kullanılır.

Örneğin, bir tablodan veri okuyan bir sorgu yürüten kullanıcı, sorgusunu WITH NOLOCK komutuyla çalıştırarak diğer kullanıcıların aynı veriye erişmesine izin verir. Böylece performans artar ancak başka bir işlem tarafından değiştirildiği için kilitlenme oluşabilir.

Bu nedenle, SQL Server’da WITH NOLOCK komutu, verilerin okunmasını hızlandırmak için kullanılsa da, veri bütünlüğü açısından bazı riskler taşıdığı için dikkatli bir şekilde kullanılmalıdır.

SQL Server’da “WITH NOLOCK” komutu, “read uncommitted” (okunmamış) işlem seviyesi olarak da bilinen “dirty read” (kirli okuma) işlem seviyesiyle ilişkilendirilir. Bu işlem seviyesi, bir sorgunun diğer işlemler tarafından yapılan değişiklikleri okumasına izin verirken, aynı zamanda bir veri sayfasının daha önce yüklenmiş ancak henüz işlenmemiş verilerini de okumasına izin verir. Bu da verilerin tutarlılığı açısından bir risk oluşturabilir.

Bu nedenle, SQL Server’da WITH NOLOCK komutu sadece okuma amaçlı sorgular için kullanılmalı ve verilerin tutarlılığı açısından riskli işlemler için kullanılmamalıdır. Bunun yerine, verilerin güncellenmesi veya silinmesi gibi işlemler yapılırken, veri bütünlüğü açısından daha güvenli olan “read committed” (okunmuş) veya “repeatable read” (yinelemeli okuma) işlem seviyeleri kullanılmalıdır.

Ayrıca, SQL Server’da WITH NOLOCK komutu kullanırken, okunan verilerin güncel olmayabileceğini ve sorgulanan verilerin kısmi veya hatalı olabileceğini unutmamak önemlidir. Bu nedenle, bu komutun kullanımı, veri bütünlüğü ve tutarlılığı açısından riskli olabilir ve dikkatli bir şekilde kullanılmalıdır.

SQL Server’da WITH NOLOCK kullanmanın avantajları arasında sorguların daha hızlı tamamlanması ve veritabanı işlemcisinin daha az kaynak kullanması bulunur. Bu, özellikle büyük veritabanları veya yoğun kullanım altındaki sistemler için yararlıdır.

Bununla birlikte, SQL Server’da WITH NOLOCK kullanmanın dezavantajları da vardır. Verilerin tutarlılığı açısından riskli olabilir ve sorguların sonuçları, diğer işlemler tarafından yapılan değişiklikler nedeniyle yanıltıcı veya hatalı olabilir. Örneğin, bir sorgu, veritabanında başka bir işlem tarafından değiştirilmiş ancak henüz işlenmemiş verileri okuyabilir.

Ayrıca, SQL Server’da WITH NOLOCK komutu, verilerin okunması sırasında kilitleme yapılmaması nedeniyle, aynı veriye eş zamanlı erişim sağlandığında bir “kaynak yarışı” (resource contention) durumu oluşabilir. Bu, özellikle yoğun bir veritabanı işlem yükü altında çalışan sistemlerde bir performans sorunu yaratabilir.

Sonuç olarak, SQL Server’da WITH NOLOCK kullanımı, veritabanı yöneticilerinin, uygulama geliştiricilerinin ve sistem tasarımcılarının, belirli bir durum için uygun işlem seviyesinin seçilmesi için dikkatli bir şekilde değerlendirme yapmalarını gerektirir.

SQL Server’da WITH NOLOCK, özellikle büyük veritabanları veya yoğun kullanım altındaki sistemlerde sorguların hızlandırılması için kullanılabilir. Örneğin, bir sorgu, tablonun değişmediği veya çok az değiştiği bir durumda, sadece okuma amaçlı kullanılabilecekse WITH NOLOCK komutu kullanılabilir.

Ayrıca, bir sorgunun kullanıcılara gerçek zamanlı sonuçlar sunması gerektiğinde, özellikle okuma amaçlı sorgularda WITH NOLOCK kullanılabilir. Ancak, sorgu sonuçlarının yanıltıcı veya hatalı olabileceği riski nedeniyle, bu kullanım durumu yine de dikkatli bir şekilde değerlendirilmelidir.

Linkteki kaynağı da okuyabilirsiniz : https://www.sqlshack.com/understanding-impact-clr-strict-security-configuration-setting-sql-server-2017/

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

273 Kez Okundu