0Pricing
SQL Interview Prep · Ders

Dört Yalıtım Düzeyi

Read Uncommitted'tan Serializable'a kadar her düzeyin neleri mümkün kıldığı.

Dört Yalıtım Düzeyi, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Sorunun Ardındaki Soru

Mülakat yapan kişi "dört yalıtım düzeyini sayın" dediğinde asıl sınama, ödünleşimi açıklayıp açıklayamadığınızdır: daha güçlü yalıtım, daha az anomali ancak daha düşük eşzamanlılık demektir.

SQL standardı, zayıftan güçlüye doğru sıralanmış dört düzey tanımlar:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

Her düzey, belirli bir okuma anomalileri kümesine izin verir veya bunu engeller. Bu derste düzeyler, sonraki derste ise anomaliler ayrıntılı olarak ele alınacaktır.

Yalıtım Düzeyini Ayarlama

Yalıtım düzeyini işlem veya oturum başına ayarlarsınız. Sözdizimi, veritabanı motorları arasında neredeyse aynıdır.

Ayarlamazsanız her veritabanının bir varsayılanı vardır. Varsayılanları bilmek sık sorulan bir mülakat sorusudur; bu nedenle bunları dersin sonunda ele alacağız.

-- Per transaction (standard SQL)
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- ... statements ...
COMMIT;

-- Per session
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Düzey 1: READ UNCOMMITTED

READ UNCOMMITTED en zayıf düzeydir. Bir işlem, başka bir işlemin değiştirdiği ancak henüz COMMIT edilmemiş satırları okuyabilir. Bunlara kirli okumalar denir.

Diğer işlem geri alınırsa resmen hiç var olmamış verileri okumuş olursunuz. Bu, doğruluğun kritik olduğu her işlem için tehlikelidir.

Not: Postgres, READ UNCOMMITTED düzeyini READ COMMITTED ile aynı kabul eder; bu nedenle gerçekte hiç kirli okuma yapmaz. SQL Server ve MySQL bu düzeye uyar.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
-- may see another transaction's uncommitted (dirty) rows
SELECT balance FROM accounts WHERE id = 1;
COMMIT;

Düzey 2: READ COMMITTED

READ COMMITTED, yalnızca COMMIT edilmiş verileri okumanızı garanti eder. Kirli okuma yoktur.

Ancak her ifade en güncel COMMIT edilmiş anlık görüntüyü görür. Aynı sorguyu tek bir işlem içinde iki kez çalıştırırsanız, arada COMMIT edilmiş başka bir işlem sonucu değiştirebilir. Bu anomaliye tekrarlanamayan okuma denir.

Bu, Postgres, Oracle ve SQL Server'daki varsayılan düzeydir ve çoğu uygulama için makul bir dengedir.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- returns 500
-- another transaction commits an update to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- may now return 700
COMMIT;

Düzey 3: REPEATABLE READ

REPEATABLE READ, aynı işlem içinde bir satırı iki kez okursanız her iki seferde de aynı değeri almanızı sağlar. İşlemin başlangıcında tutarlı bir anlık görüntü alır.

Kirli okumaları ve tekrarlanamayan okumaları önler. Standart yine de hayalet okumalara izin verir: yeniden sorgulama sırasında WHERE koşulunuza uyan yeni satırlar ortaya çıkabilir.

Önemli: bu, MySQL/InnoDB'deki varsayılan düzeydir ve InnoDB uygulaması, sonraki anahtar kilitleri aracılığıyla çoğu hayalet okumayı da engeller.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- 500
-- another transaction commits a change to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- still 500 in this txn
COMMIT;

Düzey 4: SERIALIZABLE

SERIALIZABLE en katı düzeydir. Veritabanı, işlemleri eşzamanlı çalıştırmanın sonucunun, bunları bazı seri sıraya göre birbiri ardına çalıştırmanın sonucuyla aynı olacağını garanti eder.

Kirli okumaları, tekrarlanamayan okumaları ve hayalet okumaları önler. Bunun bedeli daha fazla kilitleme veya Postgres'te yeniden denemeniz gereken serileştirme hatası iptalleridir.

Mülakatta kullanılabilecek ifade: "SERIALIZABLE, eşzamanlılığı azaltma ve olası yeniden denemeler karşılığında her işlemin tek başına çalıştırıldığı izlenimini verir."

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
INSERT INTO audit (total) VALUES (...);
COMMIT;  -- may raise a serialization_failure you retry

Anomali Matrisi

Ezberlenmesi en yararlı bilgi, her düzeyin hangi anomaliye izin verdiğidir. "Evet", anomalinin ortaya çıkabileceği anlamına gelir.

  • READ UNCOMMITTED: kirli=Evet, tekrarlanamayan=Evet, hayalet=Evet
  • READ COMMITTED: kirli=Hayır, tekrarlanamayan=Evet, hayalet=Evet
  • REPEATABLE READ: kirli=Hayır, tekrarlanamayan=Hayır, hayalet=Evet (standarda göre)
  • SERIALIZABLE: kirli=Hayır, tekrarlanamayan=Hayır, hayalet=Hayır

Her üst düzey bir anomaliyi daha engeller. Tüm yanıt bu ilerlemeden ibarettir.

Standart ve Gerçek Uygulamalar

Kıdemli düzeyde bilinmesi gereken bir ayrım şudur: SQL standardı düzeyleri nasıl uygulandıklarına göre değil, hangi anomalileri önlemek zorunda olduklarına göre tanımlar. Gerçek motorlar çoğu zaman daha fazlasını önler.

  • Postgres REPEATABLE READ anlık görüntü yalıtımı kullanır ve hayalet okumaları da engeller; ancak yine de yazma çarpıklığıyla karşılaşabilir.
  • MySQL/InnoDB REPEATABLE READ sonraki anahtar kilitlemesiyle hayalet okumaları engeller.
  • Postgres SERIALIZABLE, SSI kullanır; ağır kilitleme yerine çakışma olduğunda işlemleri iptal eder.

Bundan söz etmek, standardın tam davranışı değil, bir alt sınırı belirlediğini bildiğinizi gösterir.

Veritabanı Motorlarına Göre Varsayılan Düzeyler

Varsayılanlar sürekli sorulur. Şunları ezberleyin:

  • PostgreSQL: READ COMMITTED
  • Oracle: READ COMMITTED (hiçbir zaman kirli okuma yapmaz)
  • SQL Server: READ COMMITTED
  • MySQL (InnoDB): REPEATABLE READ

Farklı olan MySQL düzeyi, mülakatlarda sık kullanılan bir tuzaktır. "Varsayılan yalıtım düzeyi nedir?" diye sorulursa önce veritabanı motorunu mutlaka netleştirin.

Uygulamada Düzey Seçimi

Nasıl karar vereceksiniz? Bunu risk ile işlem hacmi arasındaki denge olarak ele alın.

  • Tipik OLTP iş yükleri için READ COMMITTED kullanın; hızlıdır ve kirli okumaları önler.
  • Bir işlem aynı verileri birden çok kez okuduğunda ve verilerin sabit kalması gerektiğinde REPEATABLE READ kullanın (raporlar, çok adımlı hesaplamalar).
  • Herhangi bir anomalinin kabul edilemeyeceği doğruluk açısından kritik mantık için SERIALIZABLE kullanın ve iptaller için yeniden deneme mantığı tasarlayın.

Üretimde READ UNCOMMITTED düzeyini neredeyse hiç kullanmayın.

Sık Sorulan Ek Sorular

Düzeyleri sıraladıktan sonra mülakat yapanlar hızlı ek sorularla konuyu derinleştirir. Net yanıtlar vermeye hazır olun:

  • "Kirli okumaları önleyip tekrarlanamayan okumalara izin veren düzey hangisidir?" READ COMMITTED.
  • "Standarda göre REPEATABLE READ düzeyinde hâlâ izin verilen tek anomali nedir?" Hayalet okumalar.
  • "Neden her zaman SERIALIZABLE kullanmamalı?" Eşzamanlılığı azaltır ve serileştirme hatalarında işlemlerin yeniden denenmesini zorunlu kılabilir.
  • "Daha yüksek bir düzey daha maliyetli midir?" Evet; kilitleme veya iptal edip yeniden deneme ek yükü getirir.

Bu soruları anında yanıtlayabilmeniz, düzey sıralamasını ezberlemediğinizi, gerçekten kavradığınızı gösterir.

Hızlı Kontrol

Bunlardan biri, en çok sınanan varsayılan düzey bilgisidir.

Özet: Dört Düzey, Tek Ödün

Dört yalıtım düzeyi, zayıftan güçlüye doğru bir sıra oluşturur: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Her üst düzey, eşzamanlılık pahasına bir anomaliyi daha (kirli, tekrarlanamayan, hayalet) engeller.

Varsayılanları hatırlayın (MySQL dışında her yerde READ COMMITTED, MySQL'de REPEATABLE READ) ve gerçek motorların genellikle standardın gerektirdiğinden fazlasını engellediğini unutmayın. Sırada, bu düzeylerin engellemek üzere tasarlandığı üç okuma anomalisini inceliyoruz.

Sıkça Sorulan Sorular

“Dört Yalıtım Düzeyi” dersi ücretsiz mi?

Evet — “Dört Yalıtım Düzeyi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“Dört Yalıtım Düzeyi” dersinde ne öğreneceğim?

Read Uncommitted'tan Serializable'a kadar her düzeyin neleri mümkün kıldığı. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Dört Yalıtım Düzeyi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ACID Özelliklerini Açıklama
  2. Dört Yalıtım Düzeyi
  3. Kirli, Tekrarlanamayan ve Hayalet Okumalar
  4. Kilitlenmeler, Kilitleme ve MVCC
← SQL Interview Prep Sayfasına Dön