Aracılığıyla paylaş


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

Tablolar tanımlı bölümlere sahipse veya silme vektörleri etkin değilse satır düzeyi eşzamanlılığı desteklemez. Satır düzeyi eşzamanlılık için Databricks Runtime 14.2 ve üzeri gerekir.

Bölümlere sahip tablolar satır düzeyi eşzamanlılığı desteklemez, ancak silme vektörleri etkinleştirildiğinde, ile diğer tüm yazma işlemleri arasındaki çakışmaları önleyebilir. Bkz . Satır düzeyi eşzamanlılık sınırlamaları.

14.2 öncesi Databricks Runtime sürümleri için bkz. Satır düzeyi eşzamanlılık önizleme davranışı (eski).

Uyarı

MERGE INTO satır düzeyi eşzamanlılık desteği için Databricks Runtime 14.2'de Photon gerekir. Databricks Runtime 14.3 LTS ve üzerinde Photon gerekli değildir.

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

Aşağıdaki tabloda, satır düzeyi eşzamanlılık etkinken her yalıtım düzeyinde hangi yazma işlemi çiftlerinin çakışabileceği gösterilmektedir:

INSERT (1) UPDATE, SİL, MERGE INTO OPTIMIZE
INSERT Çakışamaz
UPDATE, SİL, MERGE INTO WriteSerializable içinde çatışma meydana gelemez. Aynı satırın değiştirilmesi durumunda Serializable içinde çakışma olabilir. Aynı satır üzerinde değişiklik yapıldığında çakışmalar olabilir.
OPTIMIZE Çakışamaz 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, işlemeden önce aynı tablodan hiçbir veri okumayan ekleme işlemlerini açıklar. Aynı tabloyu okuyan alt sorgular içeren INSERT işlemleri, MERGEile aynı eşzamanlılığı destekler.

Uyarı

  • Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz . Delta Lake'te kimlik sütunlarını kullanma.
  • 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 oluşan yazma çakışmaları

Tablolar tanımlı bölümlere sahipse veya silme vektörleri etkin değilse satır düzeyi eşzamanlılığı desteklemez. Satır düzeyi eşzamanlılık için Databricks Runtime 14.2 veya üzeri gereklidir.

Satır düzeyi eşzamanlılığı olmayan çakışma matrisi

Aşağıdaki tabloda, her yalıtım düzeyinde hangi yazma işlemi çiftlerinin çakışabileceği gösterilmektedir:

INSERT (1) UPDATE, SİL, MERGE INTO OPTIMIZE
INSERT Çakışamaz
UPDATE, SİL, MERGE INTO WriteSerializable içinde çatışma meydana gelemez. Serializable'da çakışma olabilir. Bkz . Bölümleme kullanarak çakışmaları önleme. Serializable ve WriteSerializable ile çakışabilir. Bkz . Bölümleme kullanarak çakışmaları önleme.
OPTIMIZE Çakışamaz Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir. ZORDER BY kullanılmadığında silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir.

(1) Bu tablodaki tüm INSERT işlemler, işlemeden önce aynı tablodan hiçbir veri okumayan ekleme işlemlerini açıklar. Aynı tabloyu okuyan alt sorgular içeren INSERT işlemleri, MERGEile aynı eşzamanlılığı destekler.

Uyarı

  • Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz . Delta Lake'te kimlik sütunlarını kullanma.
  • REORG işlemleri, veri dosyaları yeniden yazılırken OPTIMIZE ile aynı yalıtım anlamına sahiptir. 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 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.

Örnek: 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 oluşturulur. 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üzeyiyle, kör INSERT işlemler tarafından eklenen dosyalar (veri okumadan veri ekleyen işlemler) hiçbir işlemle çakışmaz. Yalıtım düzeyi Serileştirilebilirse, kör eklemeler çakışabilir.

Önemli

Birden çok eşzamanlı DELETE, UPDATEveya MERGE işlemi kör eklemeler tarafından eklenen değerlere başvuruda bulunuyorsa, kör eklemeler WriteSerializable modunda çakışabilir. 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 özel durum, eşzamanlı bir işlem delta tablosunun meta verilerini güncelleştirdiğinde oluşur. Yaygın nedenler, tablo şemasını güncelleştiren işlemler veya yazma işlemleridir ALTER TABLE .

Eşzamanlı İşlem İstisnası

Aynı denetim noktası konumunu kullanan bir akış sorgusu eşzamanlı olarak birden çok kez başlatılır ve Delta tablosuna aynı anda yazmaya çalışırsa bu özel durum 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 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 önizleme davranışı (eski)

Bu bölümde Databricks Runtime 14.1 ve altındaki satır düzeyi eşzamanlılık için önizleme davranışları açıklanmaktadır.

Databricks Runtime Sürümü Davranış
Databricks Runtime 13.3 LTS ve üzeri Sıvı kümelemeli tablolar otomatik olarak satır düzeyi eşzamanlılığı etkinleştirir
Databricks Runtime 14.0 ve 14.1 Aşağıdaki yapılandırmayı kullanarak silme vektörlerine sahip tablolar için satır düzeyi eşzamanlılığı etkinleştirin
Databricks Runtime 14.1 ve altı Foton dışı hesaplama yalnızca DELETE operasyonlar için satır seviyesinde eşzamanlılığı destekler.

Databricks Runtime 14.0 ve 14.1'de satır düzeyi eşzamanlılığı etkinleştirmek için:

spark.databricks.delta.rowLevelConcurrencyPreview = true

Satır düzeyi eşzamanlılık her zaman silme vektörleri gerektirir.

Sonraki Adımlar