Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
INSERTbaşarısız olan işlem değildir, bu yüzden yeniden deneme mantığı eşzamanlıUPDATE,DELETE, veyaMERGE. - Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz. Kimlik sütunları.
-
REORGişlemleri, veri dosyaları yeniden yazılırkenOPTIMIZE'e ait olan yalıtım semantiğiyle aynıdır. Yükseltme uygulamak içinREORGkullandığı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
INSERTbaşarısız olan işlem değildir, bu yüzden yeniden deneme mantığı eşzamanlıUPDATE,DELETE, veyaMERGE. - Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz. Kimlik sütunları.
-
REORGişlemleri, veri dosyaları yeniden yazılırkenOPTIMIZE'e ait olan yalıtım semantiğiyle aynıdır.REORGkullanarak 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,UPDATEveyaMERGEişlemlerinin eklenen verileri okumadığından emin olun - Eklenen verileri okuyabilen en fazla bir
DELETE,UPDATEveyaMERGEiş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.