READ COMMITTED ve REPEATABLE READ

SQL Server'da İşlemler ve Hata Yönetimi

Miriam Antona

Software Engineer

READ COMMITTED

  • Varsayılan izolasyon düzeyi
  • Onaylanmamış veya geri alınmamış başka bir işlemce değiştirilmiş veriyi okuyamaz
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SQL Server'da İşlemler ve Hata Yönetimi

READ COMMITTED - izolasyon düzeyi karşılaştırması

Kirli okumalar Tekrarlanamaz okumalar Hayalet okumalar
READ UNCOMMITTED evet evet evet
READ COMMITTED hayır evet evet
SQL Server'da İşlemler ve Hata Yönetimi

READ COMMITTED - kirli okumaları önleme

Hesap 5'in ilk bakiyesi = $35.000

Transaction1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

Transaction2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;

Beklemek zorunda!

SQL Server'da İşlemler ve Hata Yönetimi

READ COMMITTED - kirli okumaları önleme

Hesap 5'in ilk bakiyesi = $35.000

Transaction1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

COMMIT TRAN;

Transaction2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
SQL Server'da İşlemler ve Hata Yönetimi

READ COMMITTED - beklemeden seçim yapma

Transaction1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transaction2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
SQL Server'da İşlemler ve Hata Yönetimi

READ COMMITTED - özet

Artıları:

  • Kirli okumaları engeller

Eksileri:

  • Tekrarlanamaz ve hayalet okumalara izin verir
  • Başka bir işlem tarafından engellenebilirsiniz

Ne zaman kullanılır?:

  • Yalnızca onaylanmış verileri okumak istediğinizde; tekrarlanamaz ve hayalet okumaları tolere edebilirsiniz
SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Diğer işlemlerin onaylanmamış verilerini okuyamaz
  • Veri okunduysa, REPEATABLE READ bitene kadar diğer işlemler o veriyi değiştiremez
SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ - izolasyon düzeyi karşılaştırması

Kirli okumalar Tekrarlanamaz okumalar Hayalet okumalar
READ UNCOMMITTED evet evet evet
READ COMMITTED hayır evet evet
REPEATABLE READ hayır hayır evet
SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ - tekrarlanamaz okumaları önleme

Transaction1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Beklemek zorunda!

SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ - tekrarlanamaz okumaları önleme

Transaction1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
COMMIT TRAN

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Beklemek zorunda!

SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ - tekrarlanamaz okumaları önleme

Transaction1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
COMMIT TRAN

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
SQL Server'da İşlemler ve Hata Yönetimi

REPEATABLE READ - özet

Artıları:

  • Okuduğunuz veriyi diğer işlemlerin değiştirmesini ve tekrarlanamaz okumaları engeller
  • Kirli okumaları engeller

Eksileri:

  • Hayalet okumalara izin verir
  • Bir REPEATABLE READ işlemi tarafından engellenebilirsiniz

Ne zaman kullanılır?:

  • Yalnızca onaylı veriyi okumak ve okuduğunuz verinin başka işlemlerce değiştirilmesini istemiyorsanız; hayalet okumalar sorun değilse
SQL Server'da İşlemler ve Hata Yönetimi

Hadi pratik yapalım!

SQL Server'da İşlemler ve Hata Yönetimi

Preparing Video For Download...