Veritabanlarındaki işlem izolasyon seviyelerini biliyor musun?
sobes.tech yapay zeka
AI'dan gelen yanıt
SQL standardında dört izolasyon seviyesi tanımlanmıştır: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: En düşük seviyedir. Bir işlem, henüz onaylanmamış (başka bir işlem tarafından yapılmış ve henüz
COMMITedilmemiş) verileri okuyabilir. Bu, "kirlilikli" okumalar (dirty reads) ile sonuçlanır. -
Read Committed: İşlem, yalnızca başlamadan veya sırasında onaylanan verileri görür. "Kirlilikli" okumaları engeller, ancak tekrar etmeyen okumalar (non-repeatable reads) ve hayalet okumalar (phantom reads) izin verir.
- Tekrar etmeyen okumalar: Aynı işlemde yapılan aynı okuma, başka bir işlem tarafından değiştirildiği ve onaylandığı için farklı veriler dönebilir.
- Hayaletler:
WHEREkoşuluyla yapılan sorgu sırasında, ikinci işlem koşula uygun satırları ekler veya siler ve ilk işlemde aynı sorgu tekrarlandığında farklı satır kümesi döner.
-
Repeatable Read: İşlem, yalnızca başlamadan önce onaylanan verileri görür. Aynı satırların tekrar tekrar okunduğunda aynı verileri döndürmesini garanti eder. "Kirlilikli" ve tekrar etmeyen okumaları engeller. Hayaletleri izin verir.
// Repeatable Read örneği // İşlem 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Örneğin, 100 // İşlem 2 (eşzamanlı çalışıyor) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Yeni kullanıcı', 'active'); // COMMIT; // İşlem 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Hala 100 (hayalet) // COMMIT; -
Serializable: En yüksek izolasyon seviyesidir. Paralel çalışan işlemlerin, belirli bir sıralı işlem gibi davranmasını sağlar. "Kirlilikli" okumaları, tekrar etmeyen okumaları ve hayaletleri engeller. Kilitlenmeler nedeniyle performans düşebilir.
Farklı veritabanı yönetim sistemlerinde (DBMS) izolasyon seviyelerinin kendi uygulamaları ve özellikleri olabilir, ayrıca ek seviyeler de bulunabilir. Örneğin, MySQL InnoDB varsayılan olarak Repeatable Read seviyesindedir.