Modül dersleri (4/4)
İzolasyon seviyeleri
Açıkça GÜNCELLEME İÇİN ötesinde, işlemler aynı zamanda her bir etkileşimi varsayılan olarak izole etmek için ne kadar enerji harcanacağını yöneten, motorun derinliklerine yerleştirilmiş doğuştan gelen matematiksel kurallara da sahiptir. Buna İzolasyon Düzeyi denir. SQL dünyasında güç ve güvenlik sırasına göre 4 standart standart biliyoruz, ancak performans açısından bunların tersi açıkça görülüyor.
READ UNCOMMITTED:Anarşik bir çılgınlık, işleminiz, kendi komut dosyalarının yarısında insanlardan alınan geçici veriler de dahil olmak üzere başkaları tarafından yapılan her değişikliği görecek. Sürekli Kirli Okuma hataları nedeniyle kimse onu büyük veri tabanlarında kullanmıyor.READ COMMITTED:(Postgres için varsayılan). Üçüncü taraf bir COMMIT gönderir göndermez yeni verileri anında göreceksiniz, ancak hayali okumaların (uzun iş akışlarınızın ortasında yeni kayıtları görme) veya doğrusal olmayan tutarlı bir görünümün kurbanı olabilirsiniz.REPEATABLE READ:Daha ağır. Büyük zaman penceresi oturumunuz boyunca, sorgumun başladığı anda veritabanının donmuş olduğunu "görüyorum", diğer insanlar tarafından tamamlanan resmi taahhütleri bile tamamen görmezden geliyor ve göz ardı ediyorum! Kayıtların sihirli bir şekilde ortaya çıkmasına karşı koruma sağlayarak istikrarı garanti eder.SERIALIZABLE:Tanrı katmanı (Süper yavaş). Çakışan her işlemi, bunları engelleyerek ve seri olarak tek bir şeritte yürüterek ele alır, çarpışan işlemleri acımasızca iptal eder, en ufak bir çarpışmanın bilimsel olasılığını bile kökünden ortadan kaldırır ve yüksek verimin %90'ını feda eder.
Bunu nasıl ayarlıyorsunuz?
Normal BEGIN; yerine şunu yazarsınız:
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- and you proceed normally with your hermetically sealed isolation
UPDATE products SET stock = 10;
COMMIT;Veya bazı varyantlarda ve daha eski motorlarda, başlattıktan sonra atayabilirsiniz:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;Kendin dene
Dondurulmuş, korumalı bir değişim oluşturmak için sorgunun yaşam süresi boyunca küresel düzeyi TEKRARLANABİLİR OKUMA olarak ayarlayan bir işlem başlatın.\nSorgu düzeyinde, başka bir şey tarafından takip edilmediği sürece hiçbir amaca hizmet etmediğini unutmayın, bu nedenle 'COMMIT' ile boş olarak kapatın.
İpucu göster
BAŞLANGIÇ İZOLASYON SEVİYESİ TEKRARLANABİLİR OKUMA ile açın; ve COMMIT ile kapatın;
3 denemeden sonra çözüm mevcut
Çılgın serileştirilebilir düzeyi deneyelim ve bazı hayali veriler ekleyelim.\n'SERIALIZABLE' bloğunu açın.\nKategori Id=2'nin adını 'Nuovo Nome Segreto' olarak güncelleyin.\nSon atomu çalıştırın ve işlemi tamamlayın.
İpucu göster
İZOLASYON DÜZEYİNİ SERİLEŞTİRİLEBİLİR BAŞLAYIN;\nGÜNCELLEME kategorileri SET name = 'Nuovo Nome Segreto' WHERE id = 2;\nCOMMIT;
3 denemeden sonra çözüm mevcut