ACID
| Harf | Özellik | Anlamı |
|---|---|---|
| A | Atomicity (bölünmezlik) | Ya hep ya hiç. |
| C | Consistency (tutarlılık) | İşlem kısıtları ihlal etmeden bir geçerli durumdan diğerine geçirir. |
| I | Isolation (yalıtım) | Eşzamanlı işlemler birbirini bozmaz. |
| D | Durability (kalıcılık) | COMMIT edilen veri çökmeden sonra da durur (WAL/redo log). |
Eşzamanlılık sorunları
- Dirty read: Başka işlemin henüz COMMIT etmediği veriyi okumak.
- Non-repeatable read: Aynı satırı iki kez okursun, arada başkası değiştirmiştir.
- Phantom read: Aynı koşulla iki kez sorgularsın, arada yeni satırlar eklenmiştir.
- Lost update: İki işlem aynı satırı okuyup günceller; biri diğerinin değişikliğini ezer.
İzolasyon seviyeleri (SQL standardı)
| Seviye | Dirty | Non-repeatable | Phantom |
|---|---|---|---|
| READ UNCOMMITTED | Olabilir | Olabilir | Olabilir |
| READ COMMITTED (PostgreSQL, SQL Server varsayılanı) | Yok | Olabilir | Olabilir |
| REPEATABLE READ (MySQL InnoDB varsayılanı) | Yok | Yok | Olabilir* |
| SERIALIZABLE | Yok | Yok | Yok |
* PostgreSQL ve InnoDB'de pratikte büyük ölçüde engellenir.
Kilitler ve MVCC
Klasik yaklaşım satır/tablo kilitleridir; okuyucu yazarı, yazar okuyucuyu bekler. Modern veritabanları (PostgreSQL, Oracle, InnoDB) MVCC (Multi-Version Concurrency Control) kullanır: Her işlem verinin bir anlık görüntüsünü görür, okuyucular yazarları engellemez. Bedeli: eski sürümlerin temizlenmesi (PostgreSQL'de VACUUM).
Deadlock: İki işlem birbirinin kilidini bekler. Veritabanı birini kurban seçip geri alır. Önlem: tablolara/satırlara hep aynı sırayla eriş, işlemleri kısa tut.