Satır düzeyi eşzamanlılık

Satır düzeyi eşzamanlılık, satır düzeyindeki değişiklikleri algılayarak ve eşzamanlı yazma işlemleri aynı veri dosyasındaki farklı satırları güncelleştirdiğinde veya sildiğinde oluşan çakışmaları otomatik olarak çözerek eşzamanlı yazma işlemleri arasındaki çakışmaları azaltır.

Satır düzeyi eşzamanlılık gereksinimleri

Aşağıdaki gereksinimlerin tümü karşılandığında satır düzeyi eşzamanlılık otomatik olarak etkinleştirilir:

  • Databricks Runtime 14.3 LTS ve üzerini kullanma.
  • Kaynak tablo bölümleri kullanmaz.
  • Kaynak tabloda silme vektörleri etkindir. Bkz . Databricks'te silme vektörleri.

Bölümlenmiş tablolar satır düzeyi eşzamanlılığa izin vermez. Ancak silme vektörleri etkinleştirildiğinde, bölümlenmiş tablolar ile yazma işlemleri arasındaki OPTIMIZE çakışmaları yine de önleyebilir. Bkz . Satır düzeyi eşzamanlılık sınırlamaları.

14.3 LTS'nin önceki Databricks Runtime sürümleri için bkz. Satır düzeyi eşzamanlılık eski davranışı.

Satır düzeyi eşzamanlılık ile çakışma matrisi

Satır düzeyinde eşzamanlılığa sahip kaynak tablolar için, aşağıdaki tablo, her eşzamanlı yazma operasyon çiftinin her izolasyon seviyesinde nasıl davrandığını gösterir.

Eşzamanlı meta veri değişiklikleri, tablodaki her sonucun istisnasıdır. Tablo şemasını güncelleyen bir ALTER TABLE komut veya yazma gibi meta veri değişikliği, tüm eşzamanlı yazma işlemlerinin başarısız olmasına neden olabilir, bunlar INSERTarasında . Metaveri değişiklik çatışmalarına bakınız.

Operasyon çifti WriteSerializable (varsayılan) Serileştirilebilir
INSERT (1) + INSERT Çakışamaz Çakışamaz
INSERT + UPDATE, SIL, MERGE INTO Çakışamaz Aynı satır üzerinde değişiklik yapıldığında çakışmalar olabilir. , UPDATEDELETE, veya MERGE işlem başarısız olur, değil.INSERT
INSERT + OPTIMIZE Çakışamaz Çakışamaz
UPDATE, SIL, MERGE INTO + UPDATE, SIL, MERGE INTO Aynı satırı değiştirirken çakışabilir Aynı satırı değiştirirken çakışabilir
UPDATE, DELETE, MERGE INTO + OPTIMIZE Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz. Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz.
OPTIMIZE + OPTIMIZE Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz. Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz.

(1) Bu tablodaki tüm INSERT işlemler, aynı tablodaki verileri okuyan alt sorgular içermeyen ekleme işlemlerini açıklar. INSERT, aynı tablodan veri okuyan alt sorgular içeren işlemler için MERGE ile aynı eşzamanlılık düzeyini destekler.

Uyarı

  • Bir çift çakışabildiğinde, sadece etkilenen veriyi okuyan işlem başarısız olur. Tabloyu okumadan veri ekleyen An INSERT başarısız olan işlem değildir, bu yüzden yeniden deneme mantığı eşzamanlı UPDATE, DELETE, veya MERGE.
  • Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz. Kimlik sütunları.
  • REORG işlemleri, veri dosyaları yeniden yazılırken OPTIMIZE'e ait olan yalıtım semantiğiyle aynıdır. Yükseltme uygulamak için REORG kullandığınızda, devam eden tüm işlemlerle çakişen tablo protokolleri değişir.

Satır düzeyi eşzamanlılık olmadan yazma çakışmaları

Satır düzeyinde eşzamanlılığı olmayan kaynak tablolar için, aşağıdaki tablo her eşzamanlı yazma işlemi çiftinin her izolasyon seviyesinde nasıl davrandığını gösterir.

Eşzamanlı meta veri değişiklikleri, tablodaki her sonucun istisnasıdır. Tablo şemasını güncelleyen bir ALTER TABLE komut veya yazma gibi meta veri değişikliği, tüm eşzamanlı yazma işlemlerinin başarısız olmasına neden olabilir, bunlar INSERTarasında . Metaveri değişiklik çatışmalarına bakınız.

Operasyon çifti WriteSerializable (varsayılan) Serileştirilebilir
INSERT (1) + INSERT Çakışamaz Çakışamaz
INSERT + UPDATE, SIL, MERGE INTO Çakışamaz Çatışma olabilir. , UPDATEDELETE, veya MERGE işlem başarısız olur, değil.INSERT Bkz . Bölümleme kullanarak çakışmaları önleme.
INSERT + OPTIMIZE Çakışamaz Çakışamaz
UPDATE, SIL, MERGE INTO + UPDATE, SIL, MERGE INTO Çatışma olabilir. Bkz . Bölümleme kullanarak çakışmaları önleme. Çatışma olabilir. Bkz . Bölümleme kullanarak çakışmaları önleme.
UPDATE, DELETE, MERGE INTO + OPTIMIZE Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir. Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir.
OPTIMIZE + OPTIMIZE Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir. Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir.

(1) Bu tablodaki tüm INSERT işlemler, aynı tablodaki verileri okuyan alt sorgular içermeyen ekleme işlemlerini açıklar. INSERT, aynı tablodan veri okuyan alt sorgular içeren işlemler için MERGE ile aynı eşzamanlılık düzeyini destekler.

Uyarı

  • Bir çift çakışabildiğinde, sadece etkilenen veriyi okuyan işlem başarısız olur. Tabloyu okumadan veri ekleyen An INSERT başarısız olan işlem değildir, bu yüzden yeniden deneme mantığı eşzamanlı UPDATE, DELETE, veya MERGE.
  • Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz. Kimlik sütunları.
  • REORG işlemleri, veri dosyaları yeniden yazılırken OPTIMIZE'e ait olan yalıtım semantiğiyle aynıdır. REORG kullanarak bir yükseltme uyguladığınızda, tablo protokolleri değişir ve devam eden tüm işlemlerle çakışır.

Satır düzeyi eşzamanlılık sınırlamaları

Satır düzeyi eşzamanlılık için sınırlamalar geçerlidir. Aşağıdaki işlemler için çakışma çözümlemesi, yazma çakışmaları için normal eşzamanlılığı izler. Bkz Satır düzeyi eşzamanlılık olmadan yazma çakışmaları.

Sınırlama Açıklama
Karmaşık koşul ifadeleri Karmaşık veri türleri (yapılar, diziler, haritalar), belirlenemeyen ifadeler, alt sorgular ve bağıntılı alt sorgular ile ilgili koşullar
MERGE ön koşul gereksinimi Databricks Runtime 14.2'de komutlar, MERGE kaynak tabloyla eşleşen satırları filtrelemek için hedef tabloda açık bir koşul kullanmalıdır
Performans değiş tokuşu Satır düzeyi çakışma algılama, toplam yürütme süresini artırabilir. Birçok eşzamanlı işlemde yazıcı, çakışma çözümüne göre gecikme süresini önceliklendirir

Silme vektörleri için tüm sınırlamalar da geçerlidir. Bkz. Sınırlamalar.

Bölümleme kullanarak çakışmaları önleme

Çakışma matrislerinde "çakışabilir" olarak işaretlenen tüm durumlarda, çakışma yalnızca iki işlem aynı dosya kümesini etkilerse oluşur. İki dosya kümesinin kopuk olmasını sağlamak için tabloyu işlem koşullarında kullanılan sütunlarla bölümleyin.

Example:

Komutlar UPDATE table WHERE date > '2010-01-01' ... ve DELETE table WHERE date < '2010-01-01', eğer tablo tarihe göre bölümlenmemişse çakışır, çünkü her ikisi de aynı dosyaları değiştirmeye çalışabilir. Tabloyu date bölümleyerek çakışmayı önler.

Uyarı

Tabloyu yüksek kardinaliteye sahip bir sütuna göre bölümleme, çok sayıda alt dizin nedeniyle performans sorunlarına yol açabilir.

Açık bölüm filtreleri ile çakışmaları önleme

Bu özel durum genellikle farklı bölümleri güncelleştirirken bile aynı bölümü okuyabilen eşzamanlı DELETE, UPDATEveya MERGE işlemleri sırasında ortaya çıkar. Ayırmayı işlem koşulunda açık hale getirin:

// Problem: Condition can scan the entire table
deltaTable.as("t").merge(
    source.as("s"),
    "s.user_id = t.user_id AND s.date = t.date AND s.country = t.country")
  .whenMatched().updateAll()
  .whenNotMatched().insertAll()
  .execute()

// Solution: Add explicit partition filters
deltaTable.as("t").merge(
    source.as("s"),
    "s.user_id = t.user_id AND s.date = t.date AND s.country = t.country AND t.date = '" + date + "' AND t.country = '" + country + "'")
  .whenMatched().updateAll()
  .whenNotMatched().insertAll()
  .execute()

Çakışma istisnaları

Bir işlem çakışması oluştuğunda aşağıdaki özel durumlardan birini gözlemlersiniz:

EşzamanlıEkEklemeİstisnası

Bu özel durum, eşzamanlı bir işlem işleminizin okuduğu aynı bölüme (veya bölümlenmemiş bir tabloda herhangi bir yere) dosya eklediğinde oluşur. Dosya eklemeleri, INSERT, DELETE, UPDATE veya MERGE işlemlerinden kaynaklanabilir.

Varsayılan WriteSerializable yalıtım düzeyinde, herhangi bir veri okumadan veri ekleyen INSERT işlemleri tarafından eklenen dosyalar hiçbir işlemle çakışmaz. Yalıtım düzeyi Serileştirilebilirse, tüm eklemeler çakışabilir.

Önemli

Bir işlemle eklenmiş değerlere referans verebilecek birden fazla eşzamanlı DELETE, UPDATE, MERGE veya işlem INSERT referans verebilirse, WriteSerializable modunda yine de çatışma meydana gelebilir. , UPDATE, veya MERGE işlemDELETE, eklenmiş veriyi okuduğu için başarısız olan işlemdir. Bunu önlemek için:

  • Eş zamanlı DELETE, UPDATEveya MERGE işlemlerinin eklenen verileri okumadığından emin olun
  • Eklenen verileri okuyabilen en fazla bir DELETE, UPDATEveya MERGE işlemine sahip olma

ConcurrentDeleteReadException

Bu özel durum, eşzamanlı bir işlem işleminizin okuduğu bir dosyayı sildiğinde oluşur. Yaygın nedenler, DELETE, UPDATE veya MERGE işlemlerinin dosyaları yeniden yazmasıdır.

ConcurrentDeleteDeleteException

Bu özel durum, eşzamanlı bir işlem işleminizin de sileceği bir dosyayı sildiğinde oluşur. Bunun nedeni iki eşzamanlı sıkıştırma işleminin aynı dosyaları yeniden yazması olabilir.

MetadataDeğişikliğiHatası

Bu istisna, eşzamanlı bir işlem bir Delta Lake tablosunun meta verilerini güncellediğinde meydana gelir. Yaygın nedenler, tablo şemasını güncelleştiren işlemler veya yazma işlemleridir ALTER TABLE .

Eşzamanlı İşlem İstisnası

Bu istisna, aynı kontrol noktası konumunu kullanan bir akış sorgusu birden fazla kez aynı anda başlatılırsa ve aynı anda Delta Lake tablosuna yazmaya çalışırsa oluşur. Aynı denetim noktası konumuna sahip iki akış sorgusunu hiçbir zaman eşzamanlı olarak çalıştırmayın.

ProtokolDeğiştiİstisnası

Bu özel durum şu durumlarda oluşabilir:

  • Delta Lake tablonuz yeni bir protokol sürümüne yükseltildi (Databricks Runtime'ınızı yükseltmeniz gerekebilir)
  • Aynı anda birden fazla yazar bir tablo oluşturuyor veya değiştiriyor.
  • Birden çok yazar aynı anda boş bir yola yazıyor

Bkz . Delta Lake özellik uyumluluğu ve protokolleri.

Satır düzeyi eşzamanlılık eski davranışı

Databricks Runtime 13.3 LTS'de satır düzeyi eşzamanlılık eski davranışı kullanır:

  • Silme vektörleri gerektirir. Bkz . Databricks'te silme vektörleri.
  • Sıvı kümelemeli tablolar, satır düzeyi eşzamanlılığı otomatik olarak etkinleştirir.

Ek kaynaklar